问题描述
我正在使用迁移学习方法构建图像分类器。目前,我只是冻结 MobileNet 系列的所有层并替换输出层以适合我的数据集。我的设置如下:
- 使用 MobileNetV1 或 V2 为 4800 张图像(训练)和 2353 张图像(测试)提取特征和标签。
- Epochs = 10,batch_size = 32,kfold = 10,优化器 = Adam (lr = 0.001)
当我运行这个没有数据增强时,我得到了一致的训练和验证准确度和损失,测试准确度也很好(> 85 %),即使学习曲线不稳定(图 1) .
当我运行这个数据增强时,我的训练和验证准确度和损失变得不稳定,高标准开发跨越 10 倍。但最终在测试数据集上的测试准确率很高,类似于没有数据增强的情况(图 2)。经过检查,我发现 train 和 val_accuracy 较低(~ 40 %),但 train 和 val_precision 以及 val_recall 高得多(~ 85 %)。我做了很多阅读,但都解释了如何解释高准确率/低准确率和召回率,而不是相反。
问题:
Picture 1 - No Data Augmentation
Picture 2 - With Data Augmentation
fold_no = 1
for train,test in kfold.split(train_features,train_labels):
mobile = models.Sequential()
mobile.add(layers.Flatten(input_shape = (7,7,1024)))
mobile.add(Dropout(0.4))
mobile.add(layers.Dense(8,activation = 'softmax'))
mobile.summary()
# compile model
mobile.compile(optimizer = optimizers.Adam(lr = 0.001),loss = 'categorical_crossentropy',metrics = ['accuracy',tf.keras.metrics.Precision(),tf.keras.metrics.Recall()])
print('------------------------------------------------------------------------')
print(f'Training for fold {fold_no} ...')
# run model training
history = mobile.fit(train_features[train],train_labels[train],epochs = epochs,batch_size = batch_size,validation_data = (train_features[test],train_labels[test]))
# print scores for each fold
scores = mobile.evaluate(train_features[test],train_labels[test],verbose = 0)
print(f'score for fold {fold_no}: {mobile.metrics_names[0]} of {scores[0]}; {mobile.metrics_names[1]} of {scores[1]*100}%')
acc_per_fold.append(scores[1] * 100)
loss_per_fold.append(scores[0])
precision_per_fold.append(scores[2])
recall_per_fold.append(scores[3])
plot_result(history)
fold_no = fold_no + 1
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)