Keras с бэкэндом Tensorflow --- Ошибка памяти в model.fit () с обратными вызовами контрольных точек - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь обучить автоэнкодеру.Он продолжает получать Memoryerror от Keras в model.fit (), это всегда происходит, когда я добавляю связанные с проверкой параметры в model.fit, например validation_split.

Ошибка:

Traceback (most recent call last):
  File "/root/abnormal-spatiotemporal-ae/start_train.py", line 53, in <module>
    train(dataset=dataset, job_folder=job_folder, logger=logger)
  File "/root/abnormal-spatiotemporal-ae/classifier.py", line 109, in train
    callbacks=[snapshot, earlystop, history_log]
  File "/root/anaconda3/envs/py35/lib/python3.5/site-packages/keras/engine/training.py",

строка 990, по размеру y, val_y = (slice_arrays (y, 0, split_at), файл "/root/anaconda3/envs/py35/lib/python3.5/site-packages/keras/utils/generic_utils.py ", строка 528, в slice_arrays возвращает [Нет, если x равен None, иначе x [start: stop] для x в массивах] Файл" /root/anaconda3/envs/py35/lib/python3.5/site-packages/keras / utils / generic_utils.py ", строка 528, взамен [Нет, если x равен None, иначе x [start: stop] для x в массивах] Файл" /root/anaconda3/envs/py35/lib/python3.5/site-packages / keras / utils / io_utils.py ", строка 110, в getitem return self.data [idx] Файл" h5py / _objects.pyx ", строка 54, в h5py._objects.with_phil.wrapperФайл "h5py / _objects.pyx", строка 55, в файле h5py._objects.with_phil.wrapper "/root/anaconda3/envs/py35/lib/python3.5/site-packages/h5py/_hl/dataset.py",строка 485, в getitem arr = numpy.ndarray (mshape, new_dtype, order = 'C') MemoryError

Код:

data = HDF5Matrix(os.path.join(video_root_path, '{0}/{0}_train_t{1}.h5'.format(dataset, time_length)),
                  'data')

snapshot = ModelCheckpoint(os.path.join(job_folder,
           'model_snapshot_e{epoch:03d}_{val_loss:.6f}.h5'))
earlystop = EarlyStopping(patience=10)
history_log = LossHistory(job_folder=job_folder, logger=logger)

logger.info("Initializing training...")

history = model.fit(
    data,
    data,
    batch_size=batch_size,
    epochs=nb_epoch,
    validation_split=0.15,
    shuffle='batch',
    callbacks=[snapshot, earlystop, history_log]
)

Код будет работатьправильно, когда я удаляю validation_split = 0,15 в model.fit и снимок в обратных вызовах.

переменная данных содержит все обработанные изображения из обучающего набора данных, его форма (15200, 8, 224, 224, 1) и размер 6101401600Этот код используется на компьютере с 64 ГБ ОЗУ и Tesla P100, не беспокойтесь о объеме памяти, и мой Python 64-битный

Модель:

input_tensor = Input(shape=(t, 224, 224, 1))

    conv1 = TimeDistributed(Conv2D(128, kernel_size=(11, 11), padding='same', strides=(4, 4), name='conv1'),
                            input_shape=(t, 224, 224, 1))(input_tensor)
    conv1 = TimeDistributed(BatchNormalization())(conv1)
    conv1 = TimeDistributed(Activation('relu'))(conv1)

    conv2 = TimeDistributed(Conv2D(64, kernel_size=(5, 5), padding='same', strides=(2, 2), name='conv2'))(conv1)
    conv2 = TimeDistributed(BatchNormalization())(conv2)
    conv2 = TimeDistributed(Activation('relu'))(conv2)

    convlstm1 = ConvLSTM2D(64, kernel_size=(3, 3), padding='same', return_sequences=True, name='convlstm1')(conv2)
    convlstm2 = ConvLSTM2D(32, kernel_size=(3, 3), padding='same', return_sequences=True, name='convlstm2')(convlstm1)
    convlstm3 = ConvLSTM2D(64, kernel_size=(3, 3), padding='same', return_sequences=True, name='convlstm3')(convlstm2)

    deconv1 = TimeDistributed(Conv2DTranspose(128, kernel_size=(5, 5), padding='same', strides=(2, 2), name='deconv1'))(convlstm3)
    deconv1 = TimeDistributed(BatchNormalization())(deconv1)
    deconv1 = TimeDistributed(Activation('relu'))(deconv1)

    decoded = TimeDistributed(Conv2DTranspose(1, kernel_size=(11, 11), padding='same', strides=(4, 4), name='deconv2'))(
        deconv1)

1 Ответ

0 голосов
/ 01 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...