Tensorflow cnn trianing ResourceExhaustedError: OOM при выделении тензора с shape [] - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь обучить глубокому остатку net работы (ResNet34, с общим количеством 21 302 722 параметров), используя тензор потока 2.0 с графическим процессором (GeForce 940 M). Последовательная модель определяется следующим образом:

model = keras.models.Sequential()
model.add(DefaultConv2D(64, kernel_size=7, strides=2,
                        input_shape=[224, 224, 3]))
model.add(keras.layers.BatchNormalization())
model.add(keras.layers.Activation("relu"))
model.add(keras.layers.MaxPool2D(pool_size=3, strides=2, padding="SAME"))

prev_filters = 64
for filters in [64] * 3 + [128] * 4 + [256] * 6 + [512] * 3:
    strides = 1 if filters == prev_filters else 2
    model.add(ResidualUnit(filters, strides=strides))
    prev_filters = filters

model.add(keras.layers.GlobalAvgPool2D())
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(2, activation="softmax"))
model.summary()

Эта модель обучается:

history = model.fit(xtrain, ytrain, epochs=10, validation_data=[xtest, ytest])

xtrain имеет форму (2000, 224, 224, 3), а xtest имеет форму (1000, 224, 224, 3).

Затем я получил сообщение об ошибке OOM:

ResourceExhaustedError: OOM when allocating tensor with shape[256,256,3,3] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
     [[{{node residual_unit_28/conv2d_64/Conv2D}}]]
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.

     [[GroupCrossDeviceControlEdges_0/training/Nadam/Nadam/Const/_287]]
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_30479]

Ошибка вызвана памятью моего компьютера (она имеет 16 ГБ ОЗУ) или некоторыми неправильными конфигурациями?

1 Ответ

3 голосов
/ 13 января 2020

Память GPU и память компьютера (RAM) различаются. Когда вы используете GPU для обучения, ему нужно будет загрузить слои и входы в память GPU. У вас слишком много параметров для вашей памяти GPU. Я посмотрел ваш графический процессор, и у него всего 2 ГБ памяти, что недостаточно для серьезного обучения работе с сетями изображений. Если вы хотите тренироваться с графическим процессором, я бы порекомендовал уменьшить количество единиц в вашей сети, уменьшить размер пакета или использовать меньшую модель в целом.

...