首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python神经网络| 一篇很棒的 手写字识别 实战

Python神经网络| 一篇很棒的 手写字识别 实战

作者头像
double
发布2018-07-31 17:23:34
8010
发布2018-07-31 17:23:34
举报
文章被收录于专栏:算法channel算法channel
题图:annie-spratt-96525-unsplash

这是第 203 篇原创

建议阅读时间:3~5分钟

如果对您有帮助,欢迎点赞和转发

优秀的知识分享氛围,需要你我共同努力。

0 前言

感谢粉丝:疯琴,以下分享是疯琴在学习《Python神经网络》时的笔记,总结得很棒,感谢疯琴的乐于分享精神,相信系列笔记一定会帮助到大家。

1 多一个隐藏层,识别率会提升吗?

Python神经网络编程一书中,分别对比了:

  1. 不同学习率;
  2. 不同隐藏层结点数;
  3. 不同训练世代的模型学习效果;

没有对比更多隐藏层的模型。于是,我自己添加了一层隐藏层的代码,得出的训练结果如下:

可见多一层隐藏层,学习效果不但没有提高,反而下降了。

相同训练世代,相同学习率的识别率,不同的隐藏层节点数与识别率关系:

10 * 10 < 20 * 30 < 20 * 20 < 30 * 20 < 30 * 30 < 50 * 50

关于这部分代码,请参考:

https://github.com/YngwieWang/NeuralNetwork/blob/master/annMnist_4layer.ipynb

2 增加样本数后,识别率会提升吗?

MNIST有6万条训练数据,书上为了获得更多的训练数据把每一条训练数据的图像分别顺时针、逆时针旋转了10度,这样就添加了两倍的训练样本。

使用这些数据,得出的结论如下:

  1. 当学习率为 0.2 时,加入旋转训练数据的模型,识别率反倒更低;
  2. 将学习率减小为 0.01 以后,增加旋转数据可以提高识别率;
  3. 通过学习率0.01和0.05两个模型进一步判断:学习率越小,增加旋转训练数据带来的学习率提高越多。

但,问题是很明显训练样本增多反而导致识别率下降。于是我怀疑我的代码有问题,下载了作者的代码跑,他是200个隐藏层结点、0.01的学习率跑了10个世代,github上他代码跑的结果是0.9754,我下载下来跑的是0.9779,然后我把我的代码改成一样的跑法用了2890.709569秒合48分钟,识别率是0.9777,看来代码没问题。

然后,我对比了一下10世代不用旋转数据的,识别率是0.9677,看来大样本要进行多世代的学习以后效果才显现,另外正如书上说的,样本量大了以后可以采用更小、更谨慎的学习步长,因此将学习率减少到0.01。

3 书中的一个问题

上一篇笔记中提到初始化权重的时候正态分布方差使用的是传入链接数也就是上一层结点数,而书上用的是当前结点数,这是个书中的错误。我在看github上的代码时,作者已经修正为上一层结点数了。

4 欢迎入群讨论

以上错误之处,有疑问的地方,或者待优化改进之处,欢迎公号内留言、微信群内提问作者。

微信群规定,群内严禁分享推文,只用于交流讨论。欢迎扫描群主微信,加入原创互助答疑 微信群。请注明:加群

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档