В течение нескольких дней я пытался обучить модели CNN на больших данных для обнаружения пожара ...
Однако, несмотря на то, что это дало приличную производительность проверки, результаты тестов были жаль.Сегодня я решил тренировать свою модель только на 10 фотографиях, 4 из класса 1, 3 из класса 2 и 3 из класса 3, без данных проверки.Я думал, что это очень быстро сойдет, но нет.Я запустил 300 эпох и мне нужно было подождать 154 эпохи, чтобы увидеть значения точности> 0,9.Тем не менее, есть только 10 изображений размером (299,299,3)
, в то время как Xception составлен из миллионов параметров, поэтому я ожидал, что он достаточно быстро переопределится, но не ...
Я использую функцию потерь cross_entropy и оптимизатор rmsprop, со скоростью обучения 10^-4
.На самом деле, я использую предварительно обученную модель для набора данных imagenet
, а затем применяю fit_transform.
Вот часть кода:
base_model_xception = Xception(include_top=False, weights='imagenet', input_shape=(299,299,3)) # Xception
x = base_model_xception.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(num_classes, activation='softmax')(x)
model_xception = Model(inputs=base_model_xception.inputs, outputs=predictions)
затем:
for layer in model.layers:
layer.trainable = True
# recompiler
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
mcp_save = ModelCheckpoint('result/'+model_name+'.hdf5', save_best_only=True, monitor='loss', mode='min',verbose=1)
hist = model.fit_generator(
generator=generate_from_paths_and_labels(
input_paths=train_input_paths,
labels=train_labels,
batch_size=batch_size_fine,
input_size=input_size_model, fct=function),
steps_per_epoch=math.ceil(len(train_input_paths) / batch_size_fine),
epochs=epochs_fine,
# validation_data=generate_from_paths_and_labels(
# input_paths=val_input_paths,
# labels=val_labels,
# batch_size=batch_size_fine,
# input_size=input_size_model,fct=function),
# validation_steps=math.ceil(len(val_input_paths) / batch_size_fine),
verbose=1,
callbacks=[
# EarlyStopping(monitor='acc',min_delta=0.001,patience=3,verbose=1,mode='auto'),
mcp_save
],
)
Почему он так медленно сходится?Это потому, что я использую предварительно тренированную модель на разных изображениях?Действительно, здесь я только что тренировался на 10 изображениях, но я не могу позволить себе такую медленную конвергенцию, если я тренируюсь на огромном количестве данных ...