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设计缺陷