Почему модель Xception Keras так медленно сходится? - PullRequest
0 голосов
/ 08 октября 2018

В течение нескольких дней я пытался обучить модели 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 изображениях, но я не могу позволить себе такую ​​медленную конвергенцию, если я тренируюсь на огромном количестве данных ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...