Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow,如何保留中间节点值并重用它们_Tensorflow - Fatal编程技术网

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。不管怎样,这个方法很好用,谢谢。