次のグラフがあるとします。
- X3
およびZ
は私が気にかけている値です。
- X
およびY
は入力です。それぞれ異なる。反復、来値とX
とY
の形状が異なっているので、私は、彼らは非常にplaceholder
ことだと思う - 状況は、私は非同期X3
とZ
を取得するために、異なる時点で二回このグラフを実行する必要があるということです。早い時点でTensorflow、中間ノードの値を保持して再利用する方法
+---+ op: +1 op: *3
| X +------------> X_1 +-----------> X3 +---+
+---+ + + | Y |
| | +-+-+
| op:add |
| | |
| | |
| op: add v op:add |
+-------------> <------------+
Z
、私は入力X
を取得する(たとえばX=7
と私はY
だか分からない、この時点です)。私はX3
の値を見たいと思う。だから私はsess.run([X3], {X:7})
を実行し、それから期待通りに24
を返します。後の時点で
、私は別の入力Y
を(Y=8
言う)を取得し、この時間は、私が唯一のノードZ
を見てみたいです。しかし、ポイントは私がはに実行する必要があります結果を得るためにsess.run([Z], {X:7, Y:8})
を実行することです。
問題は、後で実行するために、X
を再度フィードして、中間ノードX_1
とX3
を再計算する必要があります。それは効率を傷つけるフローX--> X_1 --> X3
を2回計算します。
私の考えはX_1
とX3
はグラフが破壊されるまで、私は直接の代わりに再計算の活用することができ、早期の実行後の値(X_1=8
、X3=24
)が含まれていることです。
目標を達成する方法はありますか?私が推薦する
これが正常に動作します。中間ノードX1およびX3に直接値を提供することにより、プレースホルダXがオプションになります。しかし、CPUに転送するのではなく、GPUにデータを保存しておく方がよいでしょう。とにかく、このメソッドは正常に動作します、ありがとう。 – Microos