Я построил автоматический кодировщик, чтобы «преобразовать» активации с VGG19.relu4_1
в пиксели. Я использую новые функции удобства в tensorflow.contrib.layers
(как в TF 0.10rc0). Код имеет аналогичную компоновку, как учебник CIFAR10 от TensorFlow, с train.py
, который выполняет обучение и контрольные точки модели на диск и один eval.py
, который опросает новые файлы контрольных точек и выполняет вывод на них.Восстановление неисправностей контрольно-пропускной пункт TensorFlow net
Моя проблема заключается в том, что оценка никогда не бывает такой хорошей, как обучение, ни с точки зрения значения функции потерь, ни при просмотре выходных изображений (даже при работе на тех же изображениях, что и в тренировках). Это заставляет меня думать, что это как-то связано с процессом восстановления.
Когда я смотрю на результат обучения в TensorBoard, он выглядит хорошо (в конце концов), поэтому я не думаю, что с моей сетью что-то не так.
Моя чистая выглядит следующим образом:
import tensorflow.contrib.layers as contrib
bn_params = {
"is_training": is_training,
"center": True,
"scale": True
}
tensor = contrib.convolution2d_transpose(vgg_output, 64*4, 4,
stride=2,
normalizer_fn=contrib.batch_norm,
normalizer_params=bn_params,
scope="deconv1")
tensor = contrib.convolution2d_transpose(tensor, 64*2, 4,
stride=2,
normalizer_fn=contrib.batch_norm,
normalizer_params=bn_params,
scope="deconv2")
.
.
.
И в train.py
я делаю это, чтобы сохранить контрольную точку:
variable_averages = tf.train.ExponentialMovingAverage(mynet.MOVING_AVERAGE_DECAY)
variables_averages_op = variable_averages.apply(tf.trainable_variables())
with tf.control_dependencies([apply_gradient_op, variables_averages_op]):
train_op = tf.no_op(name='train')
while training:
# train (with batch normalization's is_training = True)
if time_to_checkpoint:
saver.save(sess, checkpoint_path, global_step=step)
В eval.py
я делаю это:
# run code that creates the net
variable_averages = tf.train.ExponentialMovingAverage(
mynet.MOVING_AVERAGE_DECAY)
saver = tf.train.Saver(variable_averages.variables_to_restore())
while polling:
# sleep and check for new checkpoint files
with tf.Session() as sess:
init = tf.initialize_all_variables()
init_local = tf.initialize_local_variables()
sess.run([init, init_local])
saver.restore(sess, checkpoint_path)
# run inference (with batch normalization's is_training = False)
Синий - это потеря тренировки, а оранжевая - потеря eval.
Спасибо за решение. Я единственный, кто считает, что это действительно должно быть хорошо документировано/исправлено. Я полагал, что функция 'optimize_loss()' была всего лишь ярлыком для оптимизатора.minimize (loss, step), а не что-то, что было необходимо для других вкладчиков, чтобы они работали как рекламируемые. – DomJack