Kerasでバッチサイズが大きいために出るエラー

動作環境

2020年7月
Google Colaboratory

Kerasで以下のようなエラーが出た場合

ResourceExhaustedError                    Traceback (most recent call last)
<ipython-input-20-72c6485cb5b9> in <module>()
    196                                   validation_steps=validation_steps,
    197                                   epochs=epochs,
--> 198                                   callbacks=call_backs)
    199 

9 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60                                         inputs, attrs, num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

ResourceExhaustedError:  OOM when allocating tensor with shape[10,512,120,160] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
	 [[{{node gradients_1/conv2d_26/Relu_grad/ReluGrad-0-TransposeNHWCToNCHW-LayoutOptimizer}}]]
Hint: 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.
 [Op:__inference_keras_scratch_graph_13024]

Function call stack:
keras_scratch_graph

エラーの原因

バッチサイズが大きすぎることが原因でした。バッチサイズを小さくしましょう。学習する教師画像が大きいほど、データセットも大きくなりやすいので、そういう大きな画像を教師にする場合はよく出現します。

手っ取り早い解決コード

"""
データフレームを割ってバッチサイズを小さくする
学習画像がさらに増えて、またエラーが出るようになったらnumの数を増やせばよい
"""
num = 5
batch_size = x_train_df.shape[0] // num