Nie mogę osiągnąć podsumowania pracy przy użyciu interfejsu API Estimator API Tensorflow.Tensorflow Estimator API: podsumowania
Klasa Estimator jest bardzo użyteczna z wielu powodów: Zaimplementowałem już własne klasy, które są bardzo podobne, ale próbuję przejść do tego.
Oto przykładowy kod:
import tensorflow as tf
import tensorflow.contrib.layers as layers
import tensorflow.contrib.learn as learn
import numpy as np
# To reproduce the error: docker run --rm -w /algo -v $(pwd):/algo tensorflow/tensorflow bash -c "python sample.py"
def model_fn(x, y, mode):
logits = layers.fully_connected(x, 12, scope="dense-1")
logits = layers.fully_connected(logits, 56, scope="dense-2")
logits = layers.fully_connected(logits, 4, scope="dense-3")
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y), name="xentropy")
return {"predictions":logits}, loss, tf.train.AdamOptimizer(0.001).minimize(loss)
def input_fun():
""" To be completed for a 4 classes classification problem """
feature = tf.constant(np.random.rand(100,10))
labels = tf.constant(np.random.random_integers(0,3, size=(100,)))
return feature, labels
estimator = learn.Estimator(model_fn=model_fn,)
trainingConfig = tf.contrib.learn.RunConfig(save_checkpoints_secs=60)
estimator = learn.Estimator(model_fn=model_fn, model_dir="./tmp", config=trainingConfig)
# Works
estimator.fit(input_fn=input_fun, steps=2)
# The following code does not work
# Can't initialize saver
# saver = tf.train.Saver(max_to_keep=10) # Error: No variables to save
# The following fails because I am missing a saver... :(
hooks=[
tf.train.LoggingTensorHook(["xentropy"], every_n_iter=100),
tf.train.CheckpointSaverHook("./tmp", save_steps=1000, checkpoint_basename='model.ckpt'),
tf.train.StepCounterHook(every_n_steps=100, output_dir="./tmp"),
tf.train.SummarySaverHook(save_steps=100, output_dir="./tmp"),
]
estimator.fit(input_fn=input_fun, steps=2, monitors=hooks)
Jak widać, mogę tworzyć prognozy i używać go, ale mogę osiągnąć, aby dodać haki do procesu montażu.
Haki rejestrowania działa dobrze, ale inne wymagają zarówno tensory i wygaszacza których nie mogę zapewnić.
W tensory są zdefiniowane w funkcji modelu, więc nie mogę przekazać je do SummaryHook i Saver nie można zainicjować, ponieważ nie ma tensor uratować ...
Czy istnieje rozwiązanie mojego problemu? (Zgaduję tak, ale brak jest dokumentacji tej części w dokumentacji tensorflow)
- Jak mogę zainicjowany mój wygaszacz? A może powinienem użyć innych obiektów, takich jak Scaffold?
- Jak mogę przekazać podsumowania do PodsumowanieHook, ponieważ są one zdefiniowane w funkcji mojego modelu?
Z góry dziękuję.
PS: Widziałem interfejs API DNNClassifier, ale chcę użyć interfejsu API estymatora dla Convolutional Nets i innych. Muszę utworzyć podsumowania dla każdego estymatora.
Ok Widzę. Ale jak zdefiniować podsumowania do zapisania? Czy powinienem używać standardowej funkcji sumarycznej skalarnej w funkcji modelu? – Ma2tg
Tak, te powinny zostać dodane do kolekcji podsumowań i wybrane do automatycznego zapisania. –
@Allen Lavoie Nie mogłem znaleźć tych informacji na tensorflow Quickstart Guide/Praca z estymatorami, musicie wyraźnie powiedzieć: "Dodaj swoje podsumowania do kolekcji - tak to jest" – Pietrko