一篇很棒的实战笔记,附源码

题图:quino-al-137872-unsplash

这是第 201 篇原创

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

0 前言

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

1 基本概念

神经网络也是机器学习的一种实现,可以应用在有监督学习和无监督学习,因为中间可以有较多层,所以属于深度学习方法。

神经网络的名字很唬人,其实概念挺朴素的,是由含一个输入层,一个输出层和若干隐藏层构成的有向无环图(这名字也唬人),看图像一目了然。

为啥叫隐藏层呢,就是因为和输入输出没关系,看不见,有点儿神秘。每层的每个结点借助生物的概念称为神经元,各层之间神经元相互链接。

2 神经网络训练过程

算法训练包含两个阶段:输入向输出传送叫前向馈送信号;输出向输入传送叫反向误差传播。把输入前馈计算得到输出,把输出与目标值比对,计算误差,把误差反向传播修正链接权重。具体过程:

输入层与隐藏层之间的链接权重”与“输入信号”加权求和,“和值”通过神经元函数(比如,阶跃函数,Relu函数,Sigmoid函数等)运算得到隐藏层的结果。

用与第一步相同的过程计算出输出层的结果。

目标值-输出值=误差。

将误差按权重反向传播给隐藏层。

用梯度下降法最小化误差,计算出误差调整值,初始误差+误差调整值=训练结果。

3 训练的注意点

初始权重未知,为了避免落入错误的山谷,随机选取多个起始点(初始权重)。

根据调整应用在信号上的神经元函数的斜率(也就是梯度)来调整权重。

梯度下降法最小化误差函数。

训练过程就是调整权重的过程,初始权重的设定要注意避免网络饱和。初始权重过大容易导致网络饱和,初始权重为0或者相等将导致丧失学习能力。

输入信号通常取值范围是0.01 ~ 0.99或-1.0 ~ 1.0,一个比较合适的输出取值范围0.01 ~ 0.99。

4 自己解决的困惑

1.12节反向传播误差到更多层中,最后一张图将误差传播到了输入层,这给我造成了困惑,想了大半天,因为在后面调整误差的时候只用到了隐藏层和输出层的误差,其实在三层的网络中,只需要用输出层误差计算Who和用隐藏层误差计算Wih,计算输入层的误差其实没有用,书中应该是借用这一步推导更明确一下传播误差的方法。

2.4.4节wih初始化时正态分布的标准差取1/sqrt(传入链接数目),代码中隐藏层传入链接数目用hnodes,输出层传入链接数目用onodes,我认为传入链接数目应该是上一层的结点数,所以分别应该是inodes和hnodes。

训练时cpu使用率40%,跑了一会以后升高到60%,临近计算结束又降到40%,不是一直跑满。

5 训练结果展示

MNIST手写数字识别结果如下:

代码下载,请点击阅读原文

3 欢迎入群讨论

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

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

最近推文参考:

@all 邀你进 原创互助答疑 微信群探索下去,迎接未知的精彩。。。牢记初心,就是保持内心的几分纯真3分钟理解 支持向量机中最出神的第一笔

NLP的系列文章,公众号界面回复12

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

扫码关注腾讯云开发者

领取腾讯云代金券