В моей модели 100 000 обучающих образцов изображений. Как изменить приведенный ниже код для обучения его партиями? С model.fit_generator я должен указать это внутри функции генератора:
def data_generator(descriptions, features, n_step, max_sequence):
# loop until we finish training
while 1:
# loop over photo identifiers in the dataset
for i in range(0, len(descriptions), n_step):
Ximages, XSeq, y = list(), list(),list()
for j in range(i, min(len(descriptions), i+n_step)):
image = features[j]
# retrieve text input
desc = descriptions[j]
# generate input-output pairs
in_img, in_seq, out_word = preprocess_data([desc], [image], max_sequence)
for k in range(len(in_img)):
Ximages.append(in_img[k])
XSeq.append(in_seq[k])
y.append(out_word[k])
# yield this batch of samples to the model
yield [[array(Ximages), array(XSeq)], array(y)]
Мой model.fit_generator
код:
model.fit_generator(data_generator(texts, train_features, 1, 150),
steps_per_epoch=1500, epochs=50, callbacks=callbacks_list, verbose=1)
Любая помощь будет отличной, я тренируюсь на облако 16 ГБ, V100 Tesla
Редактировать: Моя модель подписи к изображению создает обучающую выборку для каждого токена в DSL (250 токенов). С набором данных из 50 изображений (эквивалентным 12500 обучающим образцам) и размером партии 1 я получаю OOM. Приблизительно с 32 (эквивалентно 8000 выборкам и размеру пакета 1 он отлично работает). Мой вопрос заключается в том, могу ли я оптимизировать свой код лучше или я могу использовать только несколько графических процессоров?
Исправить:
Steps_per_epoch должен быть равен ceil (num_samples / batch_size), поэтому, если набор данных имеет 1500 выборок, steps_per_epoch должен быть равен 1500. Я также уменьшил мое скользящее окно LSTM с 48 до 24
steps_per_epoch: целое число. Общее количество шагов (партий образцов), которые нужно получить от генератора до объявления одной эпохи законченной и начала следующей эпохи. Обычно он должен быть равен ceil (num_samples / batch_size). Необязательно для последовательности: если не указано, будет использоваться len (генератор) в качестве количества шагов.