私は深く学ぶのが初めてで、私は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でメモリが多すぎるのはなぜですか?
0
A
答えて
0
4000は一度に多くのように聞こえる。私が見たほとんどの例は、各バッチで数百人を訓練しています。すべての画像が一度にメモリに読み込まれる可能性があるので、メモリ使用量が多いと思います。
小さなバッチでトレーニングを試すことはできますか? 1000、またはさらには500を使用して、メモリ使用量が低下するかどうかを確認します。
0
TensorFlowは、BPの計算の中間値(たとえばレイヤー間の勾配)を保存するため、入力のサイズが大きいほど消費するメモリが多くなります。バッチサイズを減らすことは、メモリ使用量を減らすための速い方法です。
+0
バッチを減らすことは実際にメモリの使用量を減らすことができますが、それはあまりにも多くのlabledトレーニングデータです。すべてのトレーニングデータを処理するためには、はるかに多くのバッチが必要になります。つまり、収束する時間がはるかに長くなります。メモリ使用量を減らす唯一の方法はありますか? – sunnwmy
関連する問題
- 1. なぜデータが大きすぎるのCNNモデル?
- 2. node_modules内にパッケージが多すぎるのはなぜですか?
- 3. TensorFlow LinearRegressorが大きすぎると予測するのはなぜですか?
- 4. C#のメモリが多すぎる
- 5. なぜcfs_write()は多すぎるROMメモリを消費しますか?
- 6. プログラムのメモリが多すぎます
- 7. SQLが返す結果が多すぎるのはなぜですか?
- 8. なぜGPUメモリが同じではないのですか?
- 9. Datastax Opscenterが多すぎるCPUを食べるのはなぜですか?
- 10. Excelの関数に引数が多すぎるのはなぜですか?
- 11. iOSでGIFを読み込んでもメモリが多すぎる
- 12. 混在モードでのメモリ使用量が多すぎる
- 13. Xamarin StudioでiMacのメモリが多すぎます。
- 14. ブラウザでオブジェクトをキャッシュすると、メモリの量が多すぎますか?
- 15. なぜsocketIOが多すぎる接続を呼び出すのですか?
- 16. フラグメントのバックスタックで多すぎるメモリを使用する
- 17. 私のCNNはなぜ学ばないのですか?
- 18. UIWebViewからのloadHTMLString関数のメモリが多すぎます
- 19. Tensorflow CNNモデル - RESTfulなAPI
- 20. Capybara javascriptの仕様が多すぎるメモリを使用する
- 21. なぜオブジェクト検出にCNNが必要なのですか?
- 22. 定数を使用して初期化するときにTensorflowが多すぎるメモリを使用する
- 23. Java .jarが多すぎるメモリを使用する
- 24. 私のウェブページが広すぎるのはなぜですか?
- 25. jQueryの配列が遅すぎるのはなぜですか?
- 26. 原子アイオエディターが遅すぎるのはなぜですか?
- 27. iTextメモリ管理 - PdfReader/Watermarkingの読み込みが多すぎる
- 28. Javaが多すぎるメモリを消費しています
- 29. Gensim Word2Vecが多すぎるメモリを使用しています
- 30. curl_multi_exec()が多すぎるメモリを使用しています
完全なアーキテクチャなしでメモリを見積もることは困難です。しかし、4000のバッチサイズは巨大です。入力サイズは1枚あたり4000画像(128 * 128)ピクセル(1画像あたり)* 1ピクセルあたり3チャンネル* 1チャンネルあたり4バイト= 786432000バイト= 0.732421875GB(ネットワークではtf.float32が使用されていると仮定)トレーニング中に各層がバックプロパゲーションステップのための入力をキャッシュする必要があるので、完全なネットワークははるかに大きくなるであろう。 –
@Yahia Zakaria分析いただきありがとうございます。私はバッチサイズを減らしてメモリ使用量を減らすことができます。なぜなら、より多くのバッチと収束時間を意味するからです。これは唯一の選択ですか? – sunnwmy
時にはこれが唯一の選択肢です。場合によっては、ネットワークそのものを最適化することもできます(一部の操作は、他のより効率的な選択や組み合わせた操作に置き換えることもできます)。場合によっては、optimizer.minimizeで別のaggregation_methodを選択すると役立ちます(https://stackoverflow.com/questions/36194394/how-i-reduce-memory-consumption-in-a-loop-in-tensorflowを参照)。しかし、すべてが失敗した場合、バッチサイズを減らすことが唯一の選択肢になる可能性があります。 –