CNN模型在验证图像上给出的准确度为0f 90%,但在同一验证集上进行预测时,准确度几乎不为5%

时间:2019-09-21 07:25:05

标签: keras deep-learning conv-neural-network

我是CNN的新手。我正在实施CNN,将具有18000个训练图像和10,000个测试图像的数据集分类为102个输出类。 我正在使用转移学习,我可以看到训练准确性约为98%,验证准确性约为97%。但是,当我在相同的验证数据集上进行预测时,我几乎无法获得5%的准确性。 我在密集层尝试了L1 / L2正则化,看起来像是过度拟合的情况。 我尝试了辍学,但在Validation数据集本身上无法获得超过5-6%的准确性。需要一些建议和意见。 我通过随机选择102个类别中的50个图像创建了训练数据集,因此验证数据集包含约5000张图像。下面是代码

from keras.applications.mobilenet import preprocess_input

base_model=MobileNet(weights='imagenet',include_top=False)
x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,kernel_regularizer=regularizers.l2(0.3),activation='relu')(x)
x=Dense(1024,kernel_regularizer=regularizers.l2(0.3), activation='relu')(x)
preds=Dense(102,activation='softmax')(x)
model=Model(inputs=base_model.input,outputs=preds)

for layer in model.layers[:44]:
    layer.trainable=False
for layer in model.layers[44:]:
    layer.trainable=True

train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input) 

train_generator=train_datagen.flow_from_directory('./train', 
                                                 target_size=(224,224),
                                                 color_mode='rgb',
                                                 batch_size=32,
                                                 class_mode='categorical',
                                                 shuffle=True)
validation_datagen=ImageDataGenerator(preprocessing_function=preprocess_input)

validation_generator=validation_datagen.flow_from_directory('./Validation', 
                                                 target_size=(224,224),
                                                 color_mode='rgb',
                                                 batch_size=32,
                                                 class_mode='categorical',
                                                 shuffle=True)
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
step_size_train=train_generator.n//train_generator.batch_size
MobileNet=model.fit_generator(generator=train_generator,
                   steps_per_epoch=step_size_train,
                    validation_data=validation_generator,
                              validation_steps=validation_generator.n // validation_generator.batch_size,
                   epochs=30)

0 个答案:

没有答案