2017-03-06 4 views
0

私は次のように計算の一連を有する仮説グラフ有する:不要になったときにテンソルをメモリから解放するには?

a_0 = tf.placeholder() 
a_1 = some_op_1(a_0) 
a_2 = some_op_2(a_1) 
a_3 = some_op_3(a_2) 

a_3を計算するときことを確認します。 a_0およびa_1は不要であるため、a_3のメモリを割り当てる前に破棄することができます。 TensorFlowにこのメモリ最適化を実行するよう依頼する方法はありますか(ある程度時間がかかることに同意します)。

これは、必要な場合にのみメモリを割り当てることに関するthisの質問と同じではありません。

編集:このネットワークは訓練されませんので、背景を心配しないでください。

+2

これは自動的に行われます - 'a_3'計算が始まるときに、TensorFlowは' a_0'と 'a_1'をすでに破棄しています。 https://github.com/yaroslavvb/memory_utilを使用して、メモリ割り当て/割り当て解除のタイムラインを確認して、これが本当に正しいかどうかを確認することができます –

答えて

1

TensorFlowは、テンソルが使用しなくなった時点でテンソルが使用するメモリを解放するために参照カウントを使用します。 a_0a_1の値は、参照がなくなるとすぐに削除されます。また、TensorFlowの最新のビルド(1.0以降の夜間ビルド)では、いくつかの操作では、入力バッファが同じ場合は入力バッファも再利用されます形状と要素の種類。

+0

[203a4d98](https://github.com/tensorflow)が原因であると推測しています/ tensorflow/commit/203a4d98)?順方向オンリーネットワークのReLUが最も関連性があります。再利用が行われた場合はそれが良いでしょう。 –

+1

はい、これはReLUを含むすべての単項演算とバイナリ演算に適用されます。 – mrry

+0

すみません。私はこの問題を尋ねました。なぜなら、畳み込みネットワークのために予想されるイメージサイズを2倍にしているときにOOMエラーが発生しているからです。私はそれが上記の理由によるものだと思った。 @ YaroslavBulatovのスクリプトと一緒に私の記憶計算を再確認します。 – Priyatham

関連する問題