Несколько сессий и графиков в Tensorflow (в одном процессе)
Я тренирую модель, где входной вектор является выходом другой модели. Это включает в себя восстановление первой модели из файла контрольных точек при инициализации второй модели с нуля (используяtf.initialize_variables()
) в том же процессе.
Существует большое количество кода и абстракции, поэтому я просто вставляю соответствующие разделы здесь.
Ниже приведен код восстановления:
self.variables = [var for var in all_vars if var.name.startswith(self.name)]
saver = tf.train.Saver(self.variables, max_to_keep=3)
self.save_path = tf.train.latest_checkpoint(os.path.dirname(self.checkpoint_path))
if should_restore:
self.saver.restore(self.sess, save_path)
else:
self.sess.run(tf.initialize_variables(self.variables))
Каждая модель находится в своем собственном графике и сеансе, например:
self.graph = tf.Graph()
self.sess = tf.Session(graph=self.graph)
with self.sess.graph.as_default():
# Create variables and ops.
Все переменные в каждой модели создаются внутриvariable_scope
контекстный менеджер.
Кормление работает следующим образом:
Фоновый поток вызываетsess.run(inference_op)
наinput = scipy.misc.imread(X)
и помещает результат в блокирующую потокобезопасную очередь.Основной цикл обучения читает из очереди и вызываетsess.run(train_op)
на второй модели.ПРОБЛЕМА:
Я наблюдаю, что значения потерь, даже на самой первой итерации обучения (вторая модель), постоянно меняются во время прогонов (и через несколько итераций превращаются в нан). Я подтвердил, что выход первой модели всегда одинаков. Комментируяsess.run
первой модели и замена ее идентичным вводом из маринованного файла не показывает это поведение.
Этоtrain_op
:
loss_op = tf.nn.sparse_softmax_cross_entropy(network.feedforward())
# Apply gradients.
with tf.control_dependencies([loss_op]):
opt = tf.train.GradientDescentOptimizer(lr)
grads = opt.compute_gradients(loss_op)
apply_gradient_op = opt.apply_gradients(grads)
return apply_gradient_op
Я знаю, что это расплывчато, но я рад предоставить более подробную информацию. Любая помощь приветствуется!