Несколько сессий и графиков в 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

Я знаю, что это расплывчато, но я рад предоставить более подробную информацию. Любая помощь приветствуется!

Ответы на вопрос(1)

Ваш ответ на вопрос