Я использую керас (tenorflow) для обучения моей модели. Я использую функцию fit_generator
, потому что я использую ImageDataGenerator
для увеличения данных.
Вот мой вопрос, я нахожу, что есть два вида тренировочного процесса. Первый я не знаю, что это такое, но позже просто модель учится по исходным данным. И ситуация ниже:
...
145/147 [============================>.] - ETA: 0s - loss: 1.5847 - acc: 0.5120
146/147 [============================>.] - ETA: 0s - loss: 1.5838 - acc: 0.5117
...
кажется, что эта эпоха закончится, но затем в этой эпохе начнется новое обучение.
...
32/1567 [..............................] - ETA: 3:11 - loss: 1.8080 - acc: 0.4688
64/1567 [>.............................] - ETA: 2:58 - loss: 1.7491 - acc: 0.5000
...
Кроме того, я выкладываю соответствующий код прямо здесь
datagen = keras.preprocessing.image.ImageDataGenerator( featurewise_std_normalization=True, rotation_range=20,
width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True)
datagen.fit(trainX)
model.fit_generator(datagen.flow(trainX, trainY, batch_size=BATCH_SIZE),
steps_per_epoch=trainX.shape[0]//BATCH_SIZE, epochs=10,
validation_data=(testX,testY),
verbose=1,callbacks=[tb_cb,reduce_lr,early])
Я сделал что-то не так? И я не нахожу никакого решения
Очень надеюсь, что кто-то может мне помочь, спасибо
-------------------------------- Updata -------------- -------------------
Сначала я подумал, что это ошибка steps_per_epoch
. Но я ошибаюсь. Когда я возобновляю тренировку без steps_per_epoch
. Это показывает снова.
Путем исключения я обнаружил, что это вызвано validation_data
. Я не знаю почему, и я не могу удалить validation_data
, потому что его необходимо использовать, если я использую tensorboard
в обратных вызовах. И я считаю, что это будет происходить так быстро, если я удалю функцию тензорной доски и оставлю данные validation_data.
вот моя функция тензорной доски в обратных вызовах:
tb_cb = keras.callbacks.TensorBoard(log_dir=board_file, write_images=1, histogram_freq=1)
Должно быть какое-то отношение между keras.callbacks.TensorBoard
и validation_data
Кроме того, как указано в API для validation_steps
:
Уместно только если validation_data
это генератор. Общее количество шагов (партий образцов)
дать от generator
до остановки.
Необязательно для Sequence
: если не указано, будет использоваться
len(validation_data)
как количество шагов.
И я могу сказать, что шаги нового учебного процесса фактически равны количеству моих проверочных данных.