个人博客文章链接:http://www.huqj.top/article?id=168
接着上一篇所说的 BP神经网络,现在用它来实现一个手写体数字的识别程序,训练素材来自吴恩达机器学习课程,我把打包好上传到了网盘上:
1 2 |
|
训练数据一共有5000条,10个数字(0~9,为了和matlab适配,0在这里统一用10表示),每个数字各500个手写体图片,像素统一处理为20*20,其中pics中是5000张图片, data是一个.mat文件,可以直接加载到matlab中,包含两个变量X(5000x400 double矩阵)和y(5000x1 int矩阵)。
可以看到,训练数据的输入是400个像素点的灰度值,虽然图片是20x20的,但是为了处理方便将其转换成1x400的输入,可以用matlab中的reshape函数进行转换。而对于输出而言,这可以看作一个多元分类问题,一共有10种分类,所以输出可以转换成一个10维向量。定义好输入输出格式之后,再考虑下神经网络的架构,平衡性能和效率,最终选择的架构是一个25元隐含层的BP网络。另外,为了衡量最终的模型效果,我们需要从5000个数据中抽取一部分作为测试集,这里我每个数字选了10条数据作为测试数据集,不过理论上训练集和测试集的比例可以达到 7:3
利用之前编写好的BP网络训练函数和一些附加函数(sigmoid,预测函数等),最终的