質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

5708閲覧

機械学習時のエラー ResourceExhaustedErrorにより学習が進まなくなる

yohehe

総合スコア48

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/03 15:58

編集2018/10/03 16:04

tensorflow-GPUを用いてkerasによる機械学習時にmodel.fitを行うと以下のエラーが出現するのですが、GPUのメモリに学習時にデータが乗り切らないということでしょうか?
GPUをオフにして学習を開始するとエラーは出現しておりません。
GPU:GTX1060 3GBを使用しております。

学習させたいデータサイズは以下です。
train_X.shape:(4732,270)
train_y.shape:(4732,5)
test_X.shape:(2028,270)
test_y.shape:(2028,5)

batch_size,epochsを増やして学習させたいのですが、増やしていくと頻繁にエラーが出現してしまいます。

python

1#入力層、中間層、出力層の設定 2model=Sequential() 3model.add(Dense(units=4700,activation="relu",kernel_regularizer=regularizers.l2(0.001),input_shape=(n_features,))) 4model.add(normalization.BatchNormalization()) 5#Dropoutを設定 6model.add(Dense(units=4700,activation="relu",kernel_regularizer=regularizers.l2(0.001))) 7model.add(Dropout(0.5)) 8model.add(Dense(units=2700,activation="relu",kernel_regularizer=regularizers.l2(0.001))) 9model.add(Dropout(0.5)) 10model.add(Dense(units=1300,activation="relu",kernel_regularizer=regularizers.l2(0.001))) 11model.add(Dropout(0.5)) 12model.add(Dense(units=700,activation="relu",kernel_regularizer=regularizers.l2(0.001))) 13model.add(Dense(units=n_classes,activation="sigmoid")) 14model.compile(loss="binary_crossentropy",optimizer="adam",metrics=["accuracy"]) 15history=model.fit(train_X,train_y,epochs=1000,validation_data=(test_X,test_y),batch_size=2000,verbose=1,shuffle=True) 16 17 18#以下エラー内容: 19 20ResourceExhaustedError: OOM when allocating tensor with shape[4732,2716] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc 21 [[Node: dense_13/weight_regularizer/Square = Square[T=DT_FLOAT, _class=["loc:@training_1/Adam/gradients/AddN_15"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](dense_13/kernel/read)]] 22Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info. 23 [[Node: metrics_1/acc/Mean_1/_743 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_2321_metrics_1/acc/Mean_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]] 24Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info. 25 26

以上のエラーが出ると再起動しなくては学習がすすまない状態になってしまいます。
このエラーを回避する良い方法はありますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

3GBというとちょっときつい条件ですね。

epochsとは無関係なはずですが、batch_sizeは下げた方が良いのでは。

あと、ネットワーク構造がよくわからない・・・270次元の特徴量(だと思いますが)に第一層から4700unitsも使うんですか? あと、やたらたくさんある中間層、こんなに必要なんですかね。これを見直せれば、メモリ消費量を減らせるかもしれません。

投稿2018/10/03 16:30

編集2018/10/03 16:32
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohehe

2018/10/03 16:37

hayataka2049様、ありがとうございます。やはりGPUの性能が問題なのですね。batch_sizeを減らして学習を続けてみます。 中間層については勉強中で、Dropoutを増やしたほうが精度が上がりやすいということでDropoutを増やして試してみていました。 これでは多すぎるのですか。どの程度が最適かなどいろいろ調べているのですがわからないことが多く、勉強になります。分類自体は複雑な分類ではないと思うので、減らしてみます。
yohehe

2018/10/03 16:43

unitsは特徴量の分以上は必要ないのですね。サンプルの数分などあれば精度が上がるのかなどを、勉強でいろいろ試してみていたところでした。 unitsを減らしてメモリ負担を減らして見ます。
hayataka2049

2018/10/03 16:45

「必要ない」とは言い切れませんが、大抵のケースでは特徴量程度あれば十分かと 中間層も、すべて密結合とする単純な多層パーセプトロンでは1層かせいぜい2層あれば十分ではないでしょうか
yohehe

2018/10/03 16:50

ありがとうございます。本を調べておりましても中間層設定については最適なものなどはないと記載されておりましたので、units数などをいろいろと変更して試しているところでした。 多層パーセプトロンの学習においてDropoutや正則化などを複数追加すれば精度が上がるというわけでもないのですね。
yohehe

2018/10/03 17:00

epochs,batch_sizeを減らすことで安定して動作しております。hayataka2049様ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問