我的代码:
img_width, img_height = 139, 139
train_data_dir = 'newdata64/train'
validation_data_dir = 'newdata64/validation'
nb_train_samples =1500
nb_validation_samples = 948
epochs = 1000
batch_size = 10
base_model = InceptionV3(weights='imagenet',
include_top=False,input_shape=(img_width,img_height,3))
x = base_model.output
x = Flatten()(x)
x = Dense(64)(x)
x = BatchNormalization()(x)
x = Activation('relu')(x)
x = Dropout(0.8)(x)
x = Dense(2)(x)
x = BatchNormalization()(x)
x = Activation('softmax')(x)
model = Model(inputs=base_model.input, outputs=x)
model.compile(optimizer=SGD(lr=0.00001, momentum=0.4),
loss='categorical_crossentropy',metrics=['accuracy'])
我尝试过图像生成器进行数据论证,添加dropout(0.5),在FC层后添加BN,但是val_loss
变得越来越大,而损失却变得下降,并且cal_acc
似乎保持一个值在 acc 达到 100% 时不增加。
我只有很少的数据(1500个训练数据,948个验证数据)。
有没有办法解决这样的问题?
最佳答案
这是明显的过度拟合。训练集已经完美学习,但模型不适用于测试数据。
鉴于您使用了较高的退出率,可能是您的数据在训练集和验证集之间未正确划分。两个数据集中的数据可能非常不同!
很难为您提供帮助,因为我们不了解您想要预测的内容以及数据集的外观。您的数据集中根本没有太多示例。
关于python - 使用预训练模型 inception_v3,val_loss 增加,而 val_acc 保持在 60%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44129726/