为什么Xception Keras模型收敛这么慢?

时间:2018-10-08 09:40:55

标签: python keras classification conv-neural-network

几天来,我一直在尝试在大数据上训练CNN模型以进行火灾探测...

但是,尽管它提供了不错的验证性能,但测试成绩还是很遗憾的。今天,我决定只用10张图片,第1类4个,第2类3个和第3类3个模型训练模型,而没有验证数据。我认为它会很快收敛,但不会收敛。我启动了300个纪元,需要等待154个纪元才能看到> 0.9的准确性值。但是,只有(299,299,3)大小的10张图像,而Xception是由数百万个参数组成的,因此我期望它很快过拟合,但不会...

我正在使用交叉熵损失函数和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张图像,但是如果我训练大量的数据,我将无法承受如此缓慢的收敛速度...

0 个答案:

没有答案