首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用softmax做手写数字分类

对于像我这样初学机器学习算法的小白而言,手写数字分类是一个很不错的小实践。手写数字可以利用很多机器学习的算法进行分类,例如朴素贝叶斯、支持向量机、随机森林等等算法,由于笔者最近在学习神经网络,所以在此利用最简单的单个神经元模型(Softmax Regression)进行手写数字分类。

首先加载需要用到的库和数据。

加载完需要的数据之后,可以打印数据的相关信息,也可以看看手写数字的样子,在这里需要提到一下one_hot编码,读者可以自行百度,在此不赘述了。

输入数据的shape: (55000, 784)

可以看到该数据集里面有55000张图片,每张图片就是1行784列(28×28)的数据,每个数据点表示一个像素,由于数据量过大,所以不再展示,上述被注释的代码可以实现,有兴趣的读者可以自己去运行看看。

实际上MNIST数据集分成三类,训练集,测试集和验证集,下面的代码将会用到。在模型建立之前,需要定义相关变量和相应的模型参数设置。

上述代码为相应的变量定义和参数设置,读者也可以修改,优化器也可以使用其他优化器,关于优化器的种类和用法读者也可以自行查阅。关于各种交叉熵,笔者目前也不是太懂,还需下去学习,读者也可以自行修炼,领悟其使用方法以便自己可以熟练运用,在做好上述准备之后,下面就到了关键环节了,运行模型。

上述代码是笔者自己编写的一个函数,用于计算准确率,当然可能有点班门弄斧了,其实TensorFlow里面有相应的计算准确率的函数,读者可以自己去慢慢探索。

上面的代码就是运行模型的代码,中间的输出读者也可以根据自己的需要去相应的进行设置,下面来看看输出结果。

从上述结果可以看到,迭代到41次的时候已经达到了比较好的效果。下面将模型运行中的损失和测试准确率可视化。

从上面的图中可以看出,在训练过程中,损失逐渐下降,但在测试的时候,会出现震荡的情况,这在神经网络模型中会经常遇到,不过整体来看,模型的效果已经不错了,测试的准确率达到了90%以上。在得到了模型之后,可能读者也会迫不及待的想要应用了吧,哈哈,其实我也一样,下面就来应用一下模型吧。

运行上述代码,可以获得验证集的预测准确率,为了更形象的展示出来预测效果,画出混淆矩阵,下面来看看具体结果。

预测准确率为: 0.9116

上面的结果显示预测的准确率达到了91.16%,还是不错的,混淆矩阵里面也显示了具体的预测结果,横坐标代表预测值,纵坐标代表实际值,例如第1行第3列的数字5表示原始标签为0结果被错误预测为2,这样的错误情况出现了5次,其他的结果读者可以自己看看。

关于softmax做手写数字分类的做法就介绍到这里了,咱们下次再会。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180602G1I1CV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券