BP神经网络的基本实现(机器学习实验)

852 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

大连海事大学机器学习附加实验:实现基本的bp神经网络。这里的实现是通过基本numpy实现,但是通过pytoch和tensorflow实现更为简单。这个基本实现的实验对于神经网络入门还是比较有参考意义的。

一. 算法描述

神经网络是一种分层结构,一般由输入层,隐藏层,输出层组成。所以神经网络至少有3层,隐藏层多于1,总层数大于3的就是我们所说的深度学习了。

输入层:就是接收原始数据,然后往隐层送。

隐藏层:该层可以说是神经网络的关键,相当于对数据做一次特征提取。隐藏层的意义,是把前一层的向量变成新的向量。就是坐标变换,将数据做平移,旋转,伸缩,扭曲,让数据变得线性可分。

输出层:神经网络的决策输出。

image.png

二. 数据描述

简单生成二维输入层,一维输出层

image.png

三. 实验流程

1. 构建神经网络类,并初始化随机权值矩阵与偏移

image.png

2. 构建激活函数:

image.png

3. 信号正向传播,计算隐藏层及输出层

image.png

4. 计算误差值:

image.png

5. 误差反向传播:

image.png

四. 实验结果

image.png

五. 讨论

本次实验第一次手动构建自己的神经网络过程走了很多岔路,一开始设想单独为神经元创建一个类,这种设计是可行的,但难在层与层之间的交互:上一层的信号传导到下一层的信号要考虑同步,更新等问题,难度过大,因此参考很多网上的资源最终为神经网络创建了一个类,将所有方法封装到一个类中,实现较为简单。

  1. 实验数据为随机生成,可能对于实际的指导意义不大。

  2. 神经网络仅为单层,对于实际大批量数据可能效果不是很好。

  3. 模型仅为公式的套用,对于其他格式的数据还需要规范化处理。

源码地址:

gitee