Ошибка нехватки памяти при попытке реализовать модель суперразрешения - PullRequest
1 голос
/ 05 марта 2019

Я хочу понять, как генерировать изображение низкого разрешения для высокого разрешения с использованием сверточных нейронных сетей.

Нужно ли иметь меньшее входное изображение в сети, а выходное изображение будет в два раза больше?

Я сделал следующую модель:

w,h,c=x_train[0].shape


input = Input(shape=(w,h,c),name='LR')
x = UpSampling2D(size=(2,2), name='UP')(input)
h = Dense(720, activation='relu', name ='hide')(x)
h2= Dense(1280, activation='relu', name ='hide2')(h)
output= Dense(3, activation='relu', name ='output')(h2)


model = Model(inputs=input, outputs=output)
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
model.fit(x_train,y_train, epochs=50, verbose=0)

Y_train в два раза больше x_train.

Но я получаю следующее сообщение об ошибке:

ResourceExhaustedError: OOM when allocating tensor with shape[4608000,720] and type float on /job:localhost/replica:0/task:0/device:CPU:0 by allocator cpu
     [[{{node hide/MatMul}}]]
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

Что я делаю не так?

1 Ответ

1 голос
/ 05 марта 2019

Такие ошибки нехватки памяти (OOM) характерны для больших пакетов, которые просто не могут поместиться в вашей памяти.

Я сделал model.fit(x_train,y_train,batch_size=1024, epochs=50, verbose=0), и результат превысил 10% системыпамять.

1024 звучит слишком велико.Начните с small (например, ~ 64), а затем постепенно увеличивайте степень 2 (например, 128, 256 ...), пока не получите достаточно большой размер пакета, который все еще может поместиться в вашей памяти.

Общее обсуждение в Как рассчитать оптимальный размер партии тоже может быть полезным ...

...