解读Tensorflow2.0训练损失值降低,但测试正确率基本不变的情况
作者:mu_xing_
这篇文章主要介绍了Tensorflow2.0训练损失值降低,但测试正确率基本不变的情况,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Tensorflow2.0训练损失值降低,但测试正确率基本不变的情况
问题描述
对于一个架构,在识别mnist手写数字集精度较高的情况下,更换其他数据集,却无法得到较高的识别结果。假设有n个类别,修改输入端、输出端及几个卷积核的大小,识别时虽然loss在减小,但正确率acc稳定在1/n左右不变化。
解决方法
修改参数
主要考虑的参数有batch、学习率和keep_prob:
- batch ,降低该值,使得网络充分学习数据;
- 学习率,降低该值,使得模型梯度下降;
- keep_prob ,降低该值,使得模型具有学习能力。
检查模型
检查模型是否有问题,修改网络的架构。
loss计算方法
选择loss计算的公式方法是否有问题。
数据标签
检查数据的标签是否转换正确。
权重初始值
修改权重的初始化方法。
Tensorflow2.0准确率和损失值的可视化
进行准确率和损失值的可视化,就是将acc和loss使用matplot画出来。
我们在使用model.fit()函数进行训练时,同步记录了训练集和测试集的损失和准确率。
可以使用history进行调用,如下:
# 使用history将训练集和测试集的loss和acc调出来 acc = history.history['sparse_categorical_accuracy'] # 训练集准确率 val_acc = history.history['val_sparse_categorical_accuracy'] # 测试集准确率 loss = history.history['loss'] # 训练集损失 val_loss = history.history['val_loss'] # 测试集损失 # 打印acc和loss,采用一个图进行显示。 # 将acc打印出来。 plt.subplot(1, 2, 1) # 将图像分为一行两列,将其显示在第一列 plt.plot(acc, label='Training Accuracy') plt.plot(val_acc, label='Validation Accuracy') plt.title('Training and Validation Accuracy') plt.legend() plt.subplot(1, 2, 2) # 将其显示在第二列 plt.plot(loss, label='Training Loss') plt.plot(val_loss, label='Validation Loss') plt.title('Training and Validation Loss') plt.legend() plt.show()
将本篇代码放在上篇文章代码后,运行即可。
输出结果:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。