为什么我的验证准确性会停留在65%左右,我如何提高呢?

时间:2019-06-17 13:55:26

标签: python tensorflow keras conv-neural-network

我正在使用VGG16制作5个类别的图像分类CNN,每个类别包含693个宽度和高度为224px的图像,但是在15-20个时期(大约60%-65%)之后,我的验证精度仍然存在。 >

我已经在使用一些数据扩充,批处理规范化和辍学功能,并且冻结了前5层,但我的准确率似乎无法超过65%。

这些是我自己的图层

img_rows, img_cols, img_channel = 224, 224, 3

base_model = applications.VGG16(weights='imagenet', include_top=False, input_shape=(img_rows, img_cols, img_channel))
for layer in base_model.layers[:5]:
    layer.trainable = False

add_model = Sequential()
add_model.add(Flatten(input_shape=base_model.output_shape[1:]))
add_model.add(Dropout(0.5))
add_model.add(Dense(512, activation='relu'))
add_model.add(BatchNormalization())
add_model.add(Dropout(0.5))
add_model.add(Dense(5, activation='softmax'))

model = Model(inputs=base_model.input, outputs=add_model(base_model.output))
model.compile(loss='sparse_categorical_crossentropy', optimizer=optimizers.Adam(lr=0.0001),
              metrics=['accuracy'])

model.summary()

这是我的模型数据集

batch_size = 64
epochs = 25

train_datagen = ImageDataGenerator(
        rotation_range=30,
        width_shift_range=.1,
        height_shift_range=.1, 
        horizontal_flip=True)
train_datagen.fit(x_train)


history = model.fit_generator(
    train_datagen.flow(x_train, y_train, batch_size=batch_size),
    steps_per_epoch=x_train.shape[0] // batch_size,
    epochs=epochs,
    validation_data=(x_test, y_test),
    callbacks=[ModelCheckpoint('VGG16-transferlearning.model', monitor='val_acc', save_best_only=True)]
)

我想获得更高的准确性,因为我现在所获得的还不够,因此不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试的一些方法是:

  • 减小批次大小。
  • 选择另一个优化程序:RMSpropSGD ...
  • 默认情况下提高学习率,然后使用回调ReduceLROnPlateau

但是,像往常一样,这取决于您使用的数据。平衡得好吗?