2017-02-10 2 views
6

Я не могу добиться того, чтобы резюме работали с API-оценщиком Tensorflow.API оценщика тензора: Резюме

Класс Estimator очень полезен по многим причинам: я уже реализовал свои собственные классы, которые действительно похожи, но я пытаюсь переключиться на этот.

Вот пример кода:

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) 

Как вы можете видеть, я могу создать оценщик и использовать его, но я могу добиться, чтобы добавить крючки для процесса подгонки.

Каротажные крючки прекрасно работает, но другие требуют оба тензоров и заставки, которые я не могу предоставить.

тензоры определены в функции модели, таким образом, я не могу передать их в SummaryHook и Saver не может быть инициализирован, поскольку нет тензором, чтобы сохранить ...

ли есть решение моей проблемы? (Я предполагаю, что да, но есть отсутствие документации этой части в документации tensorflow)

  • Как я могу инициализировать мой заставки? Или я должен использовать другие объекты, такие как Леса?
  • Как передать резюме на SummaryHook так как они определены в моей функции модели?

Заранее спасибо.

PS: Я видел API-интерфейс DNNClassifier, но я хочу использовать API-интерфейс оценки для сверточных сетей и других. Мне нужно создать резюме для любой оценки.

ответ

5

Предполагаемый прецедент заключается в том, что вы позволяете Оценщику сохранять резюме для вас. В настройках RunConfig есть опции для настройки сводной записи. RunConfigs передается, когда constructing the Estimator.

+0

Хорошо, я вижу. Но как я могу определить сводки, которые нужно сохранить? Должен ли я использовать стандартную скалярную итоговую функцию в функции модели? – Ma2tg

+0

Да, они должны быть добавлены в сборник резюме и взяты для сохранения автоматически. –

+3

@ Allen Lavoie Я не мог найти эту информацию в руководстве по быстрому старту tenorflow/Работая с оценщиками, вы, ребята, должны явно указать: «Добавить сводки к коллекциям - вот как» – Pietrko

Смежные вопросы