Я следовал этому руководству , чтобы генерировать данные на лету с помощью метода fit_generator()
Keras, чтобы обучить свою модель нейронной сети.
Я создал генератор с помощью keras.utils.Sequence
класс. Вызов fit_generator()
:
history = model.fit_generator(generator=EVDSSequence(images_train, TRAIN_BATCH_SIZE, INPUT_IMG_DIR, INPUT_JSON_DIR, SPLIT_CHAR, sizeArray, NCHW, shuffle=True),
steps_per_epoch=None, epochs=EPOCHS,
validation_data=EVDSSequence(images_valid, VALID_BATCH_SIZE, INPUT_IMG_DIR, INPUT_JSON_DIR, SPLIT_CHAR, sizeArray, NCHW, shuffle=True),
validation_steps=None,
callbacks=callbacksList, verbose=1,
workers=0, max_queue_size=1, use_multiprocessing=False)
steps_per_epoch
равен None
, поэтому число шагов за эпоху рассчитывается методом Keras __len()__
.
Как сказано в ссылке выше:
Здесь метод on_epoch_end
запускается один раз в самом начале, а также в конце каждой эпохи. Если для параметра shuffle
установлено значение True
, мы будем получать новый порядок исследования на каждом проходе (или просто сохранять схему линейного исследования в противном случае).
Моя проблема в том, что on_epoch_end()
метод вызывается только в самом начале, но никогда в конце каждой эпохи. Таким образом, в каждую эпоху порядок партий всегда был одинаковым.
Я пытался использовать np.ceil
вместо np.floor
в __len__()
методе, но безуспешно.
Do Вы знаете, почему on_epoch_end
не вызывается в конце каждой эпохи? Не могли бы вы сказать мне какой-нибудь обходной путь, чтобы перетасовать порядок моих партий в конце (или в начале) каждой эпохи?
Большое спасибо!