Python 避免在tensorflow(LSTM模型)中重复图形

Python 避免在tensorflow(LSTM模型)中重复图形,python,tensorflow,while-loop,lstm,recurrent-neural-network,Python,Tensorflow,While Loop,Lstm,Recurrent Neural Network,我有以下简化代码(实际上是展开的LSTM模型): 每当我运行最后一行时,它似乎会改变图形。但我不想改变图表。实际上我的代码是不同的,是一个神经网络模型,但是它太大了,所以我添加了上面的代码。我想调用func,但不更改模型的图形,但它会更改。我在TensorFlow中读到了关于变量作用域的内容,但似乎我一点也不懂。你应该看看tf.nn.dynamic\u rnn的源代码,特别是\u dynamic\u rnn\u loop函数at-它解决了同样的问题。为了不破坏图形,它使用tf.while\u l

我有以下简化代码(实际上是展开的LSTM模型):


每当我运行最后一行时,它似乎会改变图形。但我不想改变图表。实际上我的代码是不同的,是一个神经网络模型,但是它太大了,所以我添加了上面的代码。我想调用
func
,但不更改模型的图形,但它会更改。我在
TensorFlow
中读到了关于变量作用域的内容,但似乎我一点也不懂。

你应该看看
tf.nn.dynamic\u rnn
的源代码,特别是
\u dynamic\u rnn\u loop
函数at-它解决了同样的问题。为了不破坏图形,它使用
tf.while\u loop
对新数据重用相同的图形操作。但是这种方法增加了一些限制,即在循环中通过的张量的形状必须是不变的。请参见文档中的示例:

i0 = tf.constant(0)
m0 = tf.ones([2, 2])
c = lambda i, m: i < 10
b = lambda i, m: [i+1, tf.concat([m, m], axis=0)]
tf.while_loop(
    c, b, loop_vars=[i0, m0],
    shape_invariants=[i0.get_shape(), tf.TensorShape([None, 2])])
i0=tf.常数(0)
m0=tf.one([2,2])
c=λi,m:i<10
b=λi,m:[i+1,tf.concat([m,m],轴=0]
tf.while_循环(
c、 b,loop_vars=[i0,m0],
shape_不变量=[i0.get_shape(),tf.TensorShape([None,2]))

是,
tf.add
添加一个新节点。您是否一直在为新节点调用
func
?如果是,则必须更改图表以引入新的op@Maxim不,假设func是一个计算图。我想在for循环中调用它。我不想它一直在变。我希望它保持不变。我不理解你的情况。你为什么在循环中调用它?@Maxim实际上这是我代码的一个非常简化的版本。我正在尝试实现一个LSTM模型。在我展开的LSTM版本中,每当我调用包含门操作的函数时,它都会生成新的内容。我希望模型保持不变,但它使他们一次又一次。也谢谢你昨天帮我。这真的很有帮助,不客气!明白了,我会试着回答。如果它应该是不变的,这意味着我不能使用None作为批大小或时间序列的长度?它静态地接受None,但它不能在任何方向上轻松增长。Tensorflow在运行时检查它。如果你确实需要增加张量,你必须指定
形状不变量
,并注意你的身体机能。简而言之,
tf.while\u loop
是一个棘手的问题。
i0 = tf.constant(0)
m0 = tf.ones([2, 2])
c = lambda i, m: i < 10
b = lambda i, m: [i+1, tf.concat([m, m], axis=0)]
tf.while_loop(
    c, b, loop_vars=[i0, m0],
    shape_invariants=[i0.get_shape(), tf.TensorShape([None, 2])])