Python 计算包含';while#u loop';

Python 计算包含';while#u loop';,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,在某些深度学习工作流中,训练模型、使用tf.graph\u util.将变量转换为常量或tf.graph\u util.提取子图非常有用,因此不需要训练相关的张量,然后通过tf.import\u graph\u def>将提取的子图连接到其他模型。通过这种方式,经过训练的模型可以作为更大设置中的构建块 通常,我们希望通过新的复合模型进行反向传播,以便对其进行微调、优化输入等等 然而,似乎无法通过导入图中的while_looptensorflow操作定义渐变,因为它依赖于“外部上下文”,即添加到元

在某些深度学习工作流中,训练模型、使用
tf.graph\u util.将变量转换为常量或
tf.graph\u util.提取子图
非常有用,因此不需要训练相关的张量,然后通过
tf.import\u graph\u def>将提取的子图连接到其他模型。通过这种方式,经过训练的模型可以作为更大设置中的构建块

通常,我们希望通过新的复合模型进行反向传播,以便对其进行微调、优化输入等等

然而,似乎无法通过导入图中的
while_loop
tensorflow操作定义渐变,因为它依赖于“外部上下文”,即添加到元图集合中的对象(请参阅)。稍微修改一下Github问题中的示例,下面是我尝试做的一个示例:

import tensorflow as tf
g1=tf.Graph()
sess1=tf.Session(graph=g1)
with g1.as_default():
    with sess1.as_default():
        i=tf.constant(0, name="input")
        out=tf.while_loop(lambda i: tf.less(i,5), lambda i: [tf.add(i,1)], [i], name="output")
        loss=tf.square(out,name='loss')
        graph_def = tf.graph_util.convert_variables_to_constants(sess1,g1.as_graph_def(),['output/Exit'])

g2 = tf.Graph()
with g2.as_default():
    tf.import_graph_def(graph_def,name='')
    i_imported = g2.get_tensor_by_name("input:0")
    out_imported = g2.get_tensor_by_name("output/Exit:0")
    tf.gradients(out_imported, i_imported)
最后一行引发了一个
AttributeError:“NoneType”对象没有属性“outer\u context”
错误

Tensorflow对此问题的解决方案是使用
tf.train.export\u meta\u graph
tf.train.import\u meta\u graph
复制外部上下文,但这会复制整个图形,无需编辑。在这种最小的情况下,“损失”张量不会被移除

我尝试将缺少的上下文复制到新图形:

g2.add_to_collection('while_context',g1.get_collection('while_context'))
但这并不能解决问题

有没有办法克服这一限制,或者这是一个无法弥补的Tensorflow设计缺陷