python学习日记26MNIST中,分类结果分析,以及图像数据库中原始label错误

本文记录了使用Python和Keras对MNIST数据集进行手写数字分类的过程,发现在训练过程中,特定数字(如0)始终分类错误,导致模型精度在90%左右。分析发现可能是由于局部最优导致,增加节点数量并不能解决问题。通过检查错误分类图像,发现一些可能的标记错误。实验表明,算法鲁棒性改进和更多学习可以改善结果。训练曲线显示模型逐渐优化,最终达到约95%的验证准确率。
摘要由CSDN通过智能技术生成

训练和预测代码如下

model=Sequential()
model.add(Dense(units=64,
input_dim=784,
kernel_initializer=‘normal’,
activation=‘relu’))
model.add(Dense(units=10,
kernel_initializer=‘normal’,
activation=‘softmax’))
model.compile(loss=‘categorical_crossentropy’,
optimizer=‘adam’,metrics=[‘accuracy’])
model.fit(x_train_normalize,
y_trainOnehot,
epochs=20,
batch_size=64,
verbose=1,
validation_data=(x_test_normalize,y_testOnehot))
y_predict= model.predict(x_train_normalize)
y_predictlabel=y_predict.argmax(1)

其它的手写数字都分类正确,只有0,没有一个分类正确的,算法的正确率也大致在90%左右。

分析:
1keras每次run代码,训练会从上一次训练结果的模型参数开始进行下一个epoch的训练,即使改变Nodes个数(units从64改成128),重新训练,精度和分类结果仍然和之前的结果基本一样。重新启动spyder则会重新初始化开始训练
2之前训练的精度无论迭代多少次,都是在0.89以上徘徊,因为所有的0都分类错误。(写代码遍历label为0的图像,没有正确分类的)。可能是因为在训练初期达到了局部最优,梯度下降无法走出该范围。重新训练后,路径不再经过该局部最优位置,因此精度大幅度提高到0.97 0.98
3通过查看分类错误图像有利于分析分类模型的效果,查找原因。对分类效果好的模型要注意保存。重新训练未必会再次优化到该参数。

附,训练曲线
在这里插入图片描述

在这里插入图片描述

4之后的重新训练,又发生了一次所有的1都分类错误,精确度收敛在0.86左右,在局部最优达到稳定。还有一次所有9分类错误,所有3分类错误。有一次训练,直接从精度0.95开始,还有一次收敛在精度0.77。
考虑增加nodes个数,是否能减少该现象。另外考虑有无设置训练步长的参数,避免该现象。实验证明,增加nodes不能解决该问题。

或者某些图像标记错误会引起该现象?不,如果算法鲁棒性好,即使有少量错误label应该依然有更好的训练结果,比如精度达到99%。考虑到这只是初级的算法,后续通过算法学习应该能够得到更优化的结果。

在这里插入图片描述
在这里插入图片描述

Layer (type) Output Shape Param #

dense (Dense) (None, 64) 50240


dense_1 (Dense) (None, 10) 650

Total params

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值