0

私は深く学ぶのが初めてで、私はTensorflow train a cnnを使って画像認識を行っています。トレーニング画像はすべて128ピクセル* 128ピクセル* 3チャネルです。私のネットワークでは、3つのconvレイヤー、3つのmaxpoolingレイヤー、1つの完全に接続されたレイヤーがあります。私は180,000以上のラベル画像を持っているので、私はそれぞれのバッチで4000枚の画像を練習することに決めました。しかし、メモリは十分ではないので、64GBのRAMと2 * E5のCPUを使用してそれを訓練しようとしたため、トレーニングプロセスはラップトップで実行できません。今回は動作しますが、40GB以上のメモリが必要です。 私がトレーニングに使った画像は、高解像度の画像(128 * 128のみ)ではないというのは混乱しています。しかし、なぜまだコストがかかりすぎるのですか(バッチサイズが大きすぎるかもしれません....)。これは正常ですか?これが正常であれば、gpuを使ってニューラルネットワークをトレーニングする方法は、gtx1080tiには11GBのメモリがありますが、ネットワークのトレーニングにはまだ十分ではありません。Tensorflow CNNでメモリが多すぎるのはなぜですか?

+2

完全なアーキテクチャなしでメモリを見積もることは困難です。しかし、4000のバッチサイズは巨大です。入力サイズは1枚あたり4000画像(128 * 128)ピクセル(1画像あたり)* 1ピクセルあたり3チャンネル* 1チャンネルあたり4バイト= 786432000バイト= 0.732421875GB(ネットワークではtf.float32が使用されていると仮定)トレーニング中に各層がバックプロパゲーションステップのための入力をキャッシュする必要があるので、完全なネットワークははるかに大きくなるであろう。 –

+0

@Yahia Zakaria分析いただきありがとうございます。私はバッチサイズを減らしてメモリ使用量を減らすことができます。なぜなら、より多くのバッチと収束時間を意味するからです。これは唯一の選択ですか? – sunnwmy

+0

時にはこれが唯一の選択肢です。場合によっては、ネットワークそのものを最適化することもできます(一部の操作は、他のより効率的な選択や組み合わせた操作に置き換えることもできます)。場合によっては、optimizer.minimizeで別のaggregation_methodを選択すると役立ちます(https://stackoverflow.com/questions/36194394/how-i-reduce-memory-consumption-in-a-loop-in-tensorflowを参照)。しかし、すべてが失敗した場合、バッチサイズを減らすことが唯一の選択肢になる可能性があります。 –

答えて

0

4000は一度に多くのように聞こえる。私が見たほとんどの例は、各バッチで数百人を訓練しています。すべての画像が一度にメモリに読み込まれる可能性があるので、メモリ使用量が多いと思います。

小さなバッチでトレーニングを試すことはできますか? 1000、またはさらには500を使用して、メモリ使用量が低下するかどうかを確認します。

0

TensorFlowは、BPの計算の中間値(たとえばレイヤー間の勾配)を保存するため、入力のサイズが大きいほど消費するメモリが多くなります。バッチサイズを減らすことは、メモリ使用量を減らすための速い方法です。

+0

バッチを減らすことは実際にメモリの使用量を減らすことができますが、それはあまりにも多くのlabledトレーニングデータです。すべてのトレーニングデータを処理するためには、はるかに多くのバッチが必要になります。つまり、収束する時間がはるかに長くなります。メモリ使用量を減らす唯一の方法はありますか? – sunnwmy

関連する問題