Ошибка ResourceExhaustedError при обучении нейронной сети - PullRequest
0 голосов
/ 29 января 2019

Всех приветствую.Я пытаюсь обучить свою первую нейронную сеть.

Когда я пытаюсь обучить ее - появляется эта ошибка:

tenorflow.python.framework.errors_impl.ResourceExhaustedError: OOMпри выделении тензора с формой [502656,128] и типом float on / job: localhost / replica: 0 / task: 0 / device: GPU: 0 по распределителю GPU_0_bfc

Я прочитал, понял, чтоэто связано с тем, что в видеокарте мало памяти (GTX 1050 2 Гб).

Получается, что я вообще не могу использовать видеокарту здесь?

Может быть, яможет как-то "порциями" выдать набор данных видеокарты?

Код:

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
import numpy as np

batch_size = 1
num_classes = 3
epochs = 2

# input image dimensions
img_rows, img_cols = 135, 240

dataset = Dataset()

x_train, y_train = dataset.LoadDataset()

x_train = x_train[0]
y_train = y_train[0]

x_train = np.array(x_train).reshape(10000, 135, 240, 1)

input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')

x_train = x_train / 255

model = Sequential()
model.add(Conv2D(32, kernel_size=(1, 1),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit([x_train], [y_train],
          batch_size=batch_size,
          epochs=epochs,
          verbose=1)

model.save("First.model")

score = model.evaluate([x_train], [y_train], verbose=0)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

1 Ответ

0 голосов
/ 29 января 2019

проверка градиента - это библиотека, разработанная OpenAI для уменьшения объема памяти нейронной сети.Это достигается путем сохранения некоторых тензоров во время прямого прохода (где рассчитывается потеря) и повторного вычисления других тензоров в обратном проходе (где градиенты рассчитываются путем обратного распространения потери).

Библиотека объявленана reddit , позволяющем тренировать модели с 10-кратной памятью в обмен на 20% более высокую вычислительную стоимость.Однако, по моему опыту, пробуя его с CNN среднего размера с лучшими настройками, которые я смог найти, это позволило мне тренироваться с вдвое большей памятью и на 30% более высокой вычислительной стоимостью.График пиковой итерации памяти на их странице GitHub показывает, что вы можете получить только большие преимущества в очень больших сетях.

Дополнительно: 2 ГБ - это слишком мало памяти GPU для обучения большинства нейронных сетей. В этой статье от 2018 года рекомендуется минимум 6 ГБ.Если вы можете, я рекомендую приобрести высокопроизводительный графический процессор с большим объемом памяти и вычислительной мощностью.Кроме того, вы можете использовать услуги облачных вычислений. Google Cloud предоставляет вам совершенно бесплатную пробную версию, где вы получаете 300 долларов на облачные услуги в течение года.

...