IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> BP神经网络介绍及算法实现 -> 正文阅读

[人工智能]BP神经网络介绍及算法实现

一、BP神经网络简介及算法实现

1.向前传播阶段

1)隐藏层神经元输入

本实验以单隐藏层的神经网络为例,隐藏层神经元的输入为 n e t i = x 1 w 1 i + x 2 w 2 i + ? + x n w n i net_i=x_1 w_{1i}+x_2 w_{2i}+?+x_n w_{ni} neti?=x1?w1i?+x2?w2i?+?+xn?wni?其中n对应输入数据的特征数,为加快收敛速度,本实验中给每一个神经元增加一个偏移量来加快收敛速度。涉及到的代码如下:

def hidden_in(feature, w0, b0):
    m = np.shape(feature)[0]
    hidden_in = feature * w0
    for i in range(m):
        hidden_in[i, ] += b0
    return hidden_in
2)隐藏层神经元输出

隐藏层神经元的输入经过激活函数f即可得到神经元的输出o=f(net),常见激活函数包括sigmoid、ReLU、Leaky_ReLU和tanh等,其表达式如下,相关代码位于activation.py中。
在这里插入图片描述

3)输出层神经元

在向前传播阶段,输出层神经元的输入和输出与隐藏层同理,不再重复。

2.向后传播阶段

1)输出层权的调整

在这里插入图片描述
在这里插入图片描述
代码示意如下:

delta_output = -np.multiply((label - output_out), act_derivate(output_in, mode=activate))
w1 = w1 - alpha * (hidden_output.T * delta_output)
2)隐藏层权的调整


代码示意如下:

delta_hidden = np.multiply((delta_output * w1.T), act_derivate(hidden_input, mode=activate))
w0 = w0 - alpha * (feature.T * delta_hidden)

3.误差测度(cost function)

向后传播算法的目的是希望缩小实际计算输出的O与理想输出(标签)Y的差距,所以整个过程需要按极小化误差的方式调整权矩阵。网络关于第p个样本的误差测度 E p = 1 2 ∑ j = 1 m ( y p j ? o p j ) 2 E_p=\frac{1}{2}∑_{j=1}^{m}(y_{pj}-o_{pj} )^2 Ep?=21?j=1m?(ypj??opj?)2由此可得网络关于整个样本集的误差测度为: E = ∑ p E p E=∑_pE_p E=p?Ep?

二、随机生成数据集

为了便于分析不同输入向量维度、分类类别数对于BP算法应用于分类问题的影响,本实验选择借助sklearn库中的make_classification函数随机生成数据并按照8:2的比例划分训练集和测试集写入相应的txt文档中。
关键代码如下:

X1, Y1 = make_classification(n_samples=num, n_features=nfeatute, n_redundant=0, n_clusters_per_class=1, n_classes=nclass)

当特征数目为2或3时,可将数据可视化,图1、2为示例:
在这里插入图片描述
当特征数大于3时,同样地将数据写入txt文档,图3为特征数为4的3分类数据集示例。
在这里插入图片描述

※初始化说明

由于本实验使用两级BP神经网络,所以共包含两个权重矩阵W0(输入-隐藏层)和W1(隐藏层-输出),借助random.rand随机对W0、W1及相应的偏置进行初始化。具体代码如下所示:

w0 = np.mat(np.random.rand(n, n_hidden))
w0 = w0 * (8.0 * sqrt(6) / sqrt(n + n_hidden)) - \
      np.mat(np.ones((n, n_hidden))) * (4.0 * sqrt(6) / sqrt(n + n_hidden))
b0 = np.mat(np.random.rand(1, n_hidden))
b0 = b0 * (8.0 * sqrt(6) / sqrt(n + n_hidden)) - \
      np.mat(np.ones((1, n_hidden))) * (4.0 * sqrt(6) / sqrt(n + n_hidden))
w1 = np.mat(np.random.rand(n_hidden, n_output))
w1 = w1 * (8.0 * sqrt(6) / sqrt(n_hidden + n_output)) - \
      np.mat(np.ones((n_hidden, n_output))) * \
(4.0 * sqrt(6) / sqrt(n_hidden + n_output))
b1 = np.mat(np.random.rand(1, n_output))
b1 = b1 * (8.0 * sqrt(6) / sqrt(n_hidden + n_output)) - \
      np.mat(np.ones((1, n_output))) * (4.0 * sqrt(6) / sqrt(n_hidden + n_output))
  • 可根据情况设置多组对照实验,例如1)不同输入向量(特征)/输出向量(类别)维度的对比实验;2)不同隐藏层神经元个数的对比实验;不同激活函数的对比实验;不同学习率的对比实验等。

完整的BP实现、训练代码以及随机生成数据集和对照实验的代码详见https://download.csdn.net/download/cc__cc__/33194209

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 12:00:06  更:2021-10-17 12:00:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:25:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码