Аномалия Кераса во время тренировок - PullRequest
0 голосов
/ 28 ноября 2018

Я использую Keras в Multi-GPU, с бэкэндом Tensorflow на 2 GPU.Я использую генератор (keras.utils.Sequence) для загрузки моих данных в пакетном режиме (BS = 64).Поэтому я использую класс fit_generator, предоставляя ему мои данные о тренировке и валидации и этапы.Я заметил странное поведение, начиная со 2-й эпохи.По сути, первые 3 шага каждой эпохи выполняются всего за 8/9 секунд каждый, затем сеть начинает занимать все больше и больше времени (как и должно быть).Журналы следующие:

Epoch 00001: val_acc improved from -inf to 0.46875, saving model to data/subs_best_model.h5
Epoch 2/32
 1/29 [>.............................] - ETA: 8s - loss: 1.0664 - acc: 0.5000
 2/29 [=>............................] - ETA: 8s - loss: 1.1384 - acc: 0.4531
 3/29 [==>...........................] - ETA: 9s - loss: 1.0915 - acc: 0.5052
 4/29 [===>..........................] - ETA: 42:03 - loss: 1.1064 - acc: 0.5117
 5/29 [====>.........................] - ETA: 56:02 - loss: 1.1173 - acc: 0.4969
 6/29 [=====>........................] - ETA: 1:03:13 - loss: 1.0964 - acc: 0.4974
 7/29 [======>.......................] - ETA: 1:06:45 - loss: 1.0740 - acc: 0.5067
 8/29 [=======>......................] - ETA: 1:08:35 - loss: 1.0592 - acc: 0.5195
 9/29 [========>.....................] - ETA: 1:08:53 - loss: 1.0580 - acc: 0.5191

Знаете ли вы, что может вызвать эту аномалию / странное поведение?

РЕДАКТИРОВАНИЕ:

Мой DataGenerator вдохновлен этой реализацией

Код, который я использую для fit_generator, выглядит следующим образом:

params = {'batch_size':  TrainConfig.BATCH_SIZE,
              'dim' : ( TrainConfig.BATCH_SIZE, 1, TrainConfig.SAMPLES),
              'labels_dim': ( TrainConfig.BATCH_SIZE,),
              'n_classes' : TrainConfig.OUTPUT_DIM}

training_generator = DataGenerator(train_set, **params)
validation_generator = DataGenerator(val_set, **params)

training_steps_per_epoch = int(1.*len(train_set) / batch_size)
validation_steps_per_epoch = int(1.*len(val_set) / batch_size)

history = model.fit_generator(generator=training_generator,
                              verbose=1,
                              use_multiprocessing=False,
                              workers=1,
                              steps_per_epoch=training_steps_per_epoch,
                              epochs=epochs,
                              validation_data=validation_generator,
                              validation_steps =validation_steps_per_epoch,
                              callbacks=callbacks)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...