python包实现bp神经网络_BP神经网络算法 python实现.doc

BP神经网络算法 python实现

BP神经网络算法 python实现

直接上代码是最有效的学习方式。这篇教程通过由一段简短的 python 代码实现的非常简单的实例来讲解 BP 反向传播算法。

当然,上述程序可能过于简练了。下面我会将其简要分解成几个部分进行探讨。

第一部分:一个简洁的神经网络

一个用 BP 算法训练的神经网络尝试着用输入去预测输出。

考虑以上情形:给定三列输入,试着去预测对应的一列输出。我们可以通过简单测量输入与输出值的数据来解决这一问题。这样一来,我们可以发现最左边的一列输入值和输出值是完美匹配/完全相关的。直观意义上来讲,反向传播算法便是通过这种方式来衡量数据间统计关系进而得到模型的。下面直入正题,动手实践。

2 层神经网络:

Output After Training:

[[ 0

[ 0

[ 0

[ 0]

变量 定义说明

X 输入数据集,形式为矩阵,每 1 行代表 1 个训练样本。

y 输出数据集,形式为矩阵,每 1 行代表 1 个训练样本。

l0 网络第 1 层,即网络输入层。

l1 网络第 2 层,常称作隐藏层。

Syn 第一层权值,突触 0 ,连接 l0 层与 l1 层。

0

* 逐元素相乘,故两等长向量相乘等同于其对等元素分别相乘,结果为同等长度的向量。

– 元素相减,故两等长向量相减等同于其对等元素分别相减,结果为同等长度的向量。

x.dot(y) 若 x 和 y 为向量,则进行点积操作;若均为矩阵,则进行矩阵相乘操作;若其中之一为矩阵,则进行向量与矩阵相乘操作。

正如在“训练后结果输出”中看到的,程序正确执行!在描述具体过程之前,我建议读者事先去尝试理解并运行下代码,对算法程序的工作方式有一个直观的感受。最好能够在 ipython notebook 中原封不动地跑通以上程序(或者你想自己写个脚本也行,但我还是强烈推荐 notebook )。下面是对理解程序有帮助的几个关键地方:

· 对比 l1 层在首次迭代和最后一次迭代时的状态。

· 仔细察看 “nonlin” 函数,正是它将一个概率值作为输出提供给我们。

· 仔细观察在迭代过程中,l1_error 是如何变化的。

· 将第 36 行中的表达式拆开来分析,大部分秘密武器就在这里面。

· 仔细理解第 39 行代码,网络中所有操作都是在为这步运算做准备。

下面,让我们一行一行地把代码过一遍。

建议:用两个屏幕来打开这篇博客,这样你就能对照着代码来阅读文章。在博客撰写时,我也正是这么做的。

第 1 行:这里导入一个名叫 numpy 的线性代数工具库,它是本程序中唯一的外部依赖。

第 4 行:这里是我们的“非线性”部分。虽然它可以是许多种函数,但在这里,使用的非线性映射为一个称作 “sigmoid” 的函数。Sigmoid 函数可以将任何值都映射到一个位于 0 到 1 范围内的值。通过它,我们可以将实数转化为概率值。对于神经网络的训练, Sigmoid 函数也有其它几个非常不错的特性。

第 5 行: 注意,通过 “nonlin” 函数体还能得到 sigmod 函数的导数(当形参 deriv 为 True 时)。Sigmoid 函数优异特性之一,在于只用它的输出值便可以得到其导数值。若 Sigmoid 的输出值用变量 out 表示,则其导数值可简单通过式子 out *(1-out) 得到,这是非常高效的。

若你对求导还不太熟悉,那么你可以这样理解:导数就是 sigmod 函数曲线在给定点上的斜率(如上图所示,曲线上不同的点对应的斜率不同)。有关更多导数方面的知识,可以参考可汗学院的导数求解教程。

第 10 行:这行代码将我们的输入数据集初始化为 numpy 中的矩阵。每一行为一个“训练实例”,每一列的对应着一个输入节点。这样,我们的神经网络便有 3 个输入节点,4 个训练实例。

第 16 行:这行代码对输出数据集进行初始化。在本例中,为了节省空间,我以水平格式( 1 行 4 列)定义生成了数据集。“.T” 为转置函数。经转置后,该 y 矩阵便包含 4 行 1 列。同我们的输入一致,每一行是一个训练实例,而每一列(仅有一列)对应一个输出节点。因此,我们的网络含有 3 个输入, 1 个输出。

第 20 行:为你的随机数设定产生种子是一个良好的习惯。这样一来,你得到的权重初始化集仍是随机分布的,但每次开始训练时,得到的权重初始集分布都是完全一致的。这便于观察你的策略变动是如何影响网络训练的。

第 23 行:这行代码实现了该神经网络权重矩阵的初


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部