2017-02-10 27 views
6

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.

Odpowiedz

5

Celem użycia jest umożliwienie Estimatorowi zapisywania podsumowań. Istnieją opcje w RunConfig do konfigurowania pisania podsumowania. RunConfig zostaje zaliczony, gdy constructing the Estimator.

+0

Ok Widzę. Ale jak zdefiniować podsumowania do zapisania? Czy powinienem używać standardowej funkcji sumarycznej skalarnej w funkcji modelu? – Ma2tg

+0

Tak, te powinny zostać dodane do kolekcji podsumowań i wybrane do automatycznego zapisania. –

+3

@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

Powiązane problemy