Я пытаюсь обучить автоэнкодеру.Он продолжает получать 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)