2段階のモデルを作成しようとしています。 最初のイメージは入力イメージを取得し、それをconv-deconvネットワークに渡します。結果として生じるTensorは、所望の出力画像(入力画像と同じサイズ)の画素に対応するエントリを有する。Tensorflowを使用しているときに大きな行列計算をメモリにフィッティングする
最終出力画像を計算するには、各ピクセル位置で生成された値を最初のフェーズから取り出し、それを入力画像全体に適用される縮小関数の追加入力として使用します。この第2ステップには学習可能な変数はありませんが、入力のサイズに応じて指数関数的に増加する計算/メモリコストがあります(各出力ピクセルはすべての入力ピクセルの関数です)。
私は現在、tf.map_fnを使用して出力イメージを計算しています。私は出力ピクセル計算関数を第1段階の結果にマッピングしています。私の望みは、テンソルフローが、各ピクセル計算に必要な中間テンソルを格納し、次にそのメモリを解放して次のピクセル計算に移るためにメモリを割り当てるということです。しかし、代わりにOOMエラーを引き起こす中間計算を解放することは決してないようです。
テンソルのデータを保持するために割り当てられたメモリを解放する必要があることをテンソルフロー(明示的にも暗黙的にも)で指摘できますか?
を、あなたは、複数のテンソルにあなたの計算を分割していますか? (つまり、TensorFlowはテンソルオブジェクトの一部を解放しません) –
はい。私はもともと巨大な行列操作をしようとしましたが、それがなぜ機能していないのかが私には分かります。これは、個々のピクセル計算ごとにテンソルを作成するためにtf.map_fn()に私を導いてくれました。 – ArEsKay3