AI——TensorFlow快速入门教程(非常详细)

举报
jimmybhb 发表于 2019/11/12 10:56:36 2019/11/12
【摘要】 转载:TensorFlow快速入门教程(非常详细)

转载:TensorFlow快速入门教程(非常详细)

tensorflow_python教程:https://www.w3cschool.cn/tensorflow_python/tensorflow_python-duje2n2k.html

tensorflow中文手册:http://www.tensorfly.cn/tfdoc/api_docs/python/math_ops.html

TensorFlow Core r2.0API教程:https://tensorflow.google.cn/api_docs/python/tf/audio/encode_wav

机器学习基础:tanh、sign、softsign:https://blog.csdn.net/lanchunhui/article/details/51236864

机器学习基础:softsign与tanh的比较:https://blog.csdn.net/ningyanggege/article/details/80665888

深度学习的激活函数:sigmoid、tanh、ReLU、Leaky Relu、RReLU、softsign、softplus、GELU的比较

常用归一化数据处理方法:https://blog.csdn.net/xuxiatian/article/details/82864785

tensorflow矩阵基本运算:https://www.jianshu.com/p/c8a1495a91d7

tensorflow简介与结构介绍:https://www.cnblogs.com/ywjfx/p/10909987.html

tensorflow入门笔记:https://blog.csdn.net/sinat_26917383/article/details/54667692

tensorflow源代码解析:内核架构和源代码结构:https://blog.csdn.net/u013510838/article/details/84103503

用docker自带的tensorflow serving 部署模型提供对外服务:https://blog.csdn.net/u011734144/article/details/82107610

Docker使用TensorFlow Serving 部署模型(一):https://blog.csdn.net/m0_38088298/article/details/85796658

BP神经网络原理:https://www.jianshu.com/p/7f1cb367a852

BP原理(前馈神经网络)

自然常数e

公式中的e叫自然常数,也叫欧拉数,e=2.71828…。e是个很神秘的数字,它是“自然律”的精髓,其中暗藏着自然增长的奥秘,它的图形表达是旋涡形的螺线。

e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! + 1/6! + 1/7! + … = 1 + 1 + 1/2 + 1/6 + 1/24 + 1/120+ … ≈ 2.71828

常见的激活函数:



最常见的激活函数是Sigmoid(S形曲线),Sigmoid有时也称为逻辑回归(Logistic Regression),简称logsig。

webp

Sigmoid(S形曲线)


还有一种S形曲线也很常见到,叫双曲正切函数(tanh),或称tansig,可以替代logsig。

webp

双曲正切函数(tanh)

下面是它们的函数图形,从图中可以看出logsig的数值范围是0~1,而tansig的数值范围是-1~1。

webp

BP算法

bp基本原理是:
利用前向传播最后输出的结果来计算误差的偏导数,再用这个偏导数和前面的隐藏层进行加权求和,如此一层一层的向后传下去,直到输入层(不计算输入层),最后利用每个节点求出的偏导数来更新权重。

webp


注意:隐藏层和输出层的值,都需要前一层加权求和之后再代入激活函数获得。

残差计算

残差(error term) : 表示误差的偏导数

输出层→隐藏层:残差 = -(输出值-样本值) * 激活函数的导数 
隐藏层→隐藏层:残差 = (右层每个节点的残差加权求和)* 激活函数的导数

(注意:激活函数的导数中代入的值是前一层的加权值)
如果输出层用Purelin作激活函数,Purelin的导数是1,输出层→隐藏层:残差 = -(输出值-样本值)

如果用Sigmoid(logsig)作激活函数,那么:Sigmoid导数 = Sigmoid*(1-Sigmoid)
(Sigmoid指的是Sigmoid函数代入前一层的加权值得到的值,即输出值)
输出层→隐藏层:

残差 = -(输出值-样本值) * Sigmoid*(1-Sigmoid) = -(输出值-样本值)输出值(1-输出值)
隐藏层→隐藏层:
残差 = (右层每个节点的残差加权求和)* 当前节点的Sigmoid*(1-当前节点的Sigmoid)

如果用tansig作激活函数,那么:tansig导数 = 1 - tansig^2

更新权重

残差全部计算好后,就可以更新权重了:

输入层:权重增加 = 输入值* 右层对应节点的残差 * 学习率 
隐藏层:权重增加 = 当前节点的Sigmoid* 右层对应节点的残差 * 学习率 
偏移值的权重增加 = 右层对应节点的残差 * 学习率

学习率是一个预先设置好的参数,用于控制每次更新的幅度。

此后,对全部数据都反复进行这样的计算,直到输出的误差达到一个很小的值为止。

BP神经网络的特点和局限:

  • BP神经网络可以用作分类、聚类、预测等。需要有一定量的历史数据,通过历史数据的训练,网络可以学习到数据中隐含的知识。在你的问题中,首先要找到某些问题的一些特征,以及对应的评价数据,用这些数据来训练神经网络。

  • BP神经网络主要是在实践的基础上逐步完善起来的系统,并不完全是建立在仿生学上的。从这个角度讲,实用性 > 生理相似性。

  • BP神经网络中的某些算法,例如如何选择初始值、如何确定隐藏层的节点个数、使用何种激活函数等问题,并没有确凿的理论依据,只有一些根据实践经验总结出的有效方法或经验公式。

  • BP神经网络虽然是一种非常有效的计算方法,但它也以计算超复杂、计算速度超慢、容易陷入局部最优解等多项弱点著称,因此人们提出了大量有效的改进方案,一些新的神经网络形式也层出不穷。

示例

webp

webp

webp

webp

webp

webp

webp

这里介绍的是计算完一条记录,就马上更新权重,以后每计算完一条都即时更新权重。实际上批量更新的效果会更好,方法是在不更新权重的情况下,把记录集的每条记录都算过一遍,把要更新的增值全部累加起来求平均值,然后利用这个平均值来更新一次权重,然后利用更新后的权重进行下一轮的计算,这种方法叫批量梯度下降(Batch Gradient Descent)。



作者:暑水
链接:https://www.jianshu.com/p/7f1cb367a852
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。