首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

单隐层BP神经网络的Python实现

上次我们谈了BP神经网络中反向传递的公式推导,这次就用Python来实现一个单隐层BP神经网络。

用BP神经网络建模的整个流程主要包括初始化模型和训练模型两部分。初始化模型包括导入数据和根据样本的维度初始化参数;训练模型包括以下两步:第一步,输入数据,正向计算得到隐藏层的输出Z和最终输出Y;第二步,反向传递,利用Y和Z更新参数;不断重复这两步,计算cost和正确率。在运行到设定的次数后停止。

接下来,我们按上文说的建模流程,用Python实现一个简单的单隐层BP神经网络。

我们手动设定了这个模型的样本和参数的维度:

根据defsize中设定的维度来随机初始化参数和样本

上面两步是模型初始化,接下来是模型训练。首先是正向计算Z和Y。

这里面用到了隐藏层的sigmoid和输出层的softmax两个激活函数。定义如下。

接下来我们实现反向传递来更新参数的函数。为了便于与上一篇公式推导中的形式对应,我首先写了四个参数的for循环写法。由于这种写法速度很慢,其后我又写了三种速度更快的形式。

首先是W2,即隐藏层到输出层的V。

接着是b2,即隐藏层到输出层的b。b可以直接由W的函数变化过来。

然后是W1,即输入层到隐藏层的W。

随后是b1,即输入层到隐藏层的b。

最后我们来实现三种速度更快的写法。基本思路少用循环,多用矩阵乘法,工具是基础的线性代数。在这里以W2为例,由上到下速度变快。

对于整个流程,我们还需要计计算cost和正确率的函数。定义如下:

万事俱备,现在我们将整个建模流程写进一个函数中。其中参数eta是反向传递的学习率,epi是训练次数。

这里放一个我跑的例子。

输出如下。

The cost is : 0.3265428804999796 . The classification rate is : 0.3333333333333333 .The cost is : 0.5030679473418662 . The classification rate is : 0.3333333333333333 .The cost is : 0.5008099421421485 . The classification rate is : 0.6446666666666667 .The cost is : 0.5003610855164803 . The classification rate is : 0.6666666666666666 .The cost is : 0.5001991955365086 . The classification rate is : 0.6666666666666666 .

补充一点,因为我对eta的理解不深,文中eta的设置就选择了一个比较常用的值;我试过其他不同的值,有些是单纯地训练效果差,有的甚至会报溢出的错误。

以上就是用Python实现一个简单的单隐层bp神经网络的全部内容,欢迎大家批评指正。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券