2017-01-07 14 views
2

畳み込みオートエンコーダーをトレーニングするとき、KerasはResourceExhaustedErrorを投げています。私はTensorflowバックエンドを実行しています。このコンピュータには、11 Gbsのメモリを搭載したNvidia Teslaと6 Gbsのメモリを搭載したNvidia Quadroがあります。 Tensorflowが両方のGPUを使用しているようですか?しかし、私はそれについてあまり明確ではありません。ここで私が使用しているコードの最小の例です。私の例では、データは次元=(100,1080,1920,1)の小さな配列です。KerasがResourceExhaustedErrorを投げているのはなぜですか?

from keras.layers import Convolution2D, MaxPooling2D, UpSampling2D, Activation 
from keras.models import Sequential 
model = Sequential() 
model.add(Convolution2D(16, 3, 3, border_mode='same', input_shape=(1080, 1920, 1))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D((2, 2), border_mode='same')) 
model.add(Convolution2D(16, 3, 3, border_mode='same')) 
model.add(Activation('relu')) 
model.add(UpSampling2D((2, 2))) 
model.add(Convolution2D(1, 3, 3, border_mode='same')) 
model.add(Activation('relu')) 
model.compile(optimizer='adadelta', loss='binary_crossentropy') 
model.fit(data, data) 

GPUのメモリが不足しているようです。自動エンコーダーには2625個の変数があります。だから、ビデオRAMをいっぱいにするようには見えません。アレイデータのサイズは1600 MBです。ビデオRAMをいっぱいにしてはいけません。私は問題がnb_epochとbatch_sizeと関係があると推測していますが、これらのパラメータが何をするかについては完全にはわかりません。問題を解決するためにこれらのパラメータを変更する方法はありますか?

+0

変更 'Convolution2D' - > 'Conv2D' を参照してください。https://stackoverflow.com/a/46032412 –

答えて

4

のは、あなたが(パラメータ用メモリにもかかわらず)、このネットワークのために必要なのですかどのくらいのメモリの概算してみましょう:

  1. 入力:1600メガバイト
  2. 第1層:〜1600メガバイト×16/4 = 6400メガバイト(あなたは16倍以上のチャンネルとプール層を持っています - 入力のサイズを4で減らします)。
  3. 第2層:6400MB(入力と出力は同じです)。
  4. 第3層:25600MB(データ量が4倍に増えています)
  5. 出力層:1600MB(入力と同じ)。

第3層だけで11GB以上のメモリが必要になることがあります。さらに、すべてのフォワード値はバックプロパゲーションアルゴリズム用に格納されています。実際には、メモリの必要性の最終的な見積もりを得るために、これらの値のすべてを合計する必要があります。

関連する問題