我是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)