Tensorflow,如何保留中间节点值并重用它们
假设我有以下图表。Tensorflow,如何保留中间节点值并重用它们,tensorflow,Tensorflow,假设我有以下图表。 -X3和Z是我关心的值。 -X和Y是输入。在每一个不同的地方。在迭代中,X和Y的未来值和形状是不同的,所以我认为它们应该是占位符 -情况是,我需要在不同的时间点运行此图两次,以异步获得X3和Z +---+ op: +1 op: *3 | X +------------> X_1 +-----------> X3 +---+ +---+ + +
-
X3
和Z
是我关心的值。-
X
和Y
是输入。在每一个不同的地方。在迭代中,X
和Y
的未来值和形状是不同的,所以我认为它们应该是占位符
-情况是,我需要在不同的时间点运行此图两次,以异步获得X3
和Z
+---+ op: +1 op: *3
| X +------------> X_1 +-----------> X3 +---+
+---+ + + | Y |
| | +-+-+
| op:add |
| | |
| | |
| op: add v op:add |
+-------------> <------------+
Z
+--+op:+1 op:*3
|X+----------->X_1+----------->X3+---+
+---+++|Y|
| | +-+-+
|op:添加|
| | |
| | |
|op:add v op:add|
+------------->X_1-->X3
两次,这会影响效率
我的想法是,X_1
和X3
将在早期运行后包含值(X_1=8
,X3=24
),直到图形被销毁,然后我可以直接利用,而不是重新计算
有没有办法实现这个目标?我建议的一个选择是:
temp_X1, temp_X3 = sess.run([X_1, X3], feed_dict={X:7})
sess.run(Z, feed_dict={X_1:temp_X1, X3:temp_X3, Y: 8}
您不需要将所有内容都存储在tf
图形中。
有关其他选项(如使用保存程序
等),请参阅。)
注意:文档建议输入到占位符
,但输入到中间的张量
最容易达到您的要求。以下内容并不能完全解决您的问题,但再次输入X
可以避免:
X_temp = tf.Variable(0, dtype=tf.int32)
X = tf.placeholder_with_default(X_temp, shape=())
Y = tf.placeholder(tf.int32, shape=())
X_temp = tf.assign(X_temp, X)
X_1 = X_temp + 1
X3 = X_1 * 3
Z = X_1 + X3 + Y
sess = tf.InteractiveSession()
print(sess.run(X3, {X:7}))
print(sess.run(Z, {Y:8}))
#24
#40
这个很好用。直接向中间节点X1和X3提供值将使占位符X成为可选的。但最好有一种方法将数据保存在GPU中,而不是传输到CPU。不管怎样,这个方法很好用,谢谢。