Потеря Keras увеличивается с каждой эпохой

#tensorflow #keras

#тензорный поток #keras

Вопрос:

Я использую Keras для глубокого обучения. У меня есть 1860 выборок для 3 классов. Потери увеличиваются во время обучения. Я уже удалил выпадающие файлы.

Модель

 model = models.Sequential()
model.add(layers.Conv2D(128, (3, 3), input_shape=(480, 640, 3), use_bias=False))
model.add(layers.BatchNormalization())
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(512, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(3, activation='softmax'))
  

Генератор

 model.compile(loss='categorical_crossentropy',
 optimizer=optimizers.sgd(),
 metrics=['acc'])

validation_dir = r'C:UsersuserDesktopvalidation_data'

train_data_generator = ImageDataGenerator(
 rescale=1. / 255,
 horizontal_flip=True)

validation_data_generator = ImageDataGenerator(rescale=1. / 255)

train_generator = train_data_generator.flow_from_directory(
 train_dir,
 target_size=(480, 640),
 batch_size=20,
 class_mode='categorical')

validation_generator = validation_data_generator.flow_from_directory(
 validation_dir,
 target_size=(480, 640),
 batch_size=30,
 class_mode='categorical')

checkpointer = ModelCheckpoint(
 filepath=checkpoint_path,
 verbose=1,
 save_best_only=True)

model.fit_generator(
 train_generator,
 steps_per_epoch=93,
 epochs=35,
 validation_data=validation_generator,
 validation_steps=6,
 callbacks=[checkpointer])
  

Потери растут, и обучение занимает действительно много времени. Я не уверен, слишком ли велики мои ширина и высота.

Комментарии:

1. Попробуйте другой оптимизатор и особенно скорость обучения меньше, чем по умолчанию. И что вы подразумеваете под «обучение занимает действительно много времени» ? Обучение занимает столько времени, сколько вы решите его запустить (если потери увеличатся, то, вероятно, навсегда).

2. @a_guest Спасибо за ваш ответ. Для одной эпохи требуется около 4 часов. Можете ли вы порекомендовать оптимизатор и скорость обучения? Или попытка и ошибка?

3. Вы можете попробовать Adam и скорость обучения где-то между 1e-4 и 1e-5 (лучше начать с малого). Также может помочь добавление большего количества слоев пакетной нормы.

4. Вы нормализуете свои данные перед загрузкой их в модель?

5. @desertnaut Нет, я использую BatchNormalization только в качестве слоя.