#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 только в качестве слоя.