Múltiples sesiones y gráficos en Tensorflow (en el mismo proceso)

Estoy entrenando un modelo donde el vector de entrada es la salida de otro modelo. Esto implica restaurar el primer modelo desde un archivo de punto de control mientras se inicializa el segundo modelo desde cero (usandotf.initialize_variables()) en el mismo proceso.

Hay una cantidad sustancial de código y abstracción, así que solo estoy pegando las secciones relevantes aquí.

El siguiente es el código de restauración:

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))

Cada modelo tiene un alcance dentro de su propio gráfico y sesión, así:

 self.graph = tf.Graph()
 self.sess = tf.Session(graph=self.graph)

 with self.sess.graph.as_default():
    # Create variables and ops.

Todas las variables dentro de cada modelo se crean dentro delvariable_scope gestor de contexto.

La alimentación funciona de la siguiente manera:

Un hilo de fondo llamasess.run(inference_op) eninput = scipy.misc.imread(X) y pone el resultado en una cola de bloqueo segura para subprocesos.El ciclo de entrenamiento principal lee de la cola y llamasess.run(train_op) en el segundo modelo.

PROBLEMA:
Estoy observando que los valores de pérdida, incluso en la primera iteración del entrenamiento (segundo modelo) siguen cambiando drásticamente a lo largo de las carreras (y se vuelven nan en algunas iteraciones). Confirmé que el resultado del primer modelo es exactamente el mismo cada vez. Comentando elsess.run del primer modelo y reemplazarlo con una entrada idéntica de un archivo encurtido no muestra este comportamiento.

Este es eltrain_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

Sé que esto es vago, pero estoy feliz de proporcionar más detalles. Cualquier ayuda es apreciada!