Bp算法公式推导推导-详解

前言
在这里插入图片描述

学习深度学习我们应该从Bp开始,一下是学习路径

在这里插入图片描述
如果我们把深度学习比喻一棵大树,Bp相当于根,LeNet相当于茎,GAN,RNN,CNN相当于树叶.
Bp 神经网络的简单理解
bp是 Back Propagation 的简写 ,意思是反向传播。而神经网络,听着高大上,其实就是一类相对复杂的计算网络。
正向传播
正向传播就是让信息从输入层进入网络,依次经过每一层的计算,得到最终输出层结果的过程。
在这里插入图片描述
反向传播
反向传播的信息是误差,也就是 输出层(output )的结果 与 输入信息 x 对应的真实结果 之间的差距。
在这里插入图片描述

实例设计

  1. 通过正向传播与计算,得到一个正向值
  2. 与标准值对比,得到误差函数E
  3. 反向传播,计算
  4. 得到修正值
  5. 替换成新值,本次学习结束

在这里插入图片描述

import math
import numpy as np
import sys
import scipy.io as sio
from PIL import Image
import osdef sigmod(x):return np.array(list(map(lambda i: 1 / (1 + math.exp(-i)), x)))def get_train_pattern():current_dir = "D:/bp1/"train = sio.loadmat(current_dir + "mnist_train.mat")["mnist_train"]train_label = sio.loadmat(current_dir + "mnist_train_labels.mat")["mnist_train_labels"]train = np.where(train > 180, 1, 0)  #二值化return train, train_labeldef get_test_pattern():base_url = "D:/bp1/mnist_test/"test_img_pattern = []for i in range(10):img_url = os.listdir(base_url + str(i))t = []for url in img_url:img = Image.open(base_url + str(i) + "/" + url)img = img.convert('1')   # 二值化img_array = np.asarray(img, 'i')  # 转化为int数组img_vector = img_array.reshape(img_array.shape[0] * img_array.shape[1]) #展开成一维数组t.append(img_vector)test_img_pattern.append(t)return test_img_patternclass BPNetwork:# 神经网络类def __init__(self,in_count, hiden_count, out_count, in_rate, hiden_rate):""":param in_count: 输入层数:param hiden_count: 隐藏层数:param out_count: 输出层数:param in_rate: 输入层学习率:param hiden_rate: 隐藏层学习率:return:"""# 各个层的节点数量self.in_count = in_countself.hiden_count = hiden_countself.out_count = out_count# 输入层到隐藏层连线的权重随机初始化self.w1 = 0.2 * \np.random.random((self.in_count, self.hiden_count)) - 0.1# 隐藏层到输出层连线的权重随机初始化self.w2 = 0.2 * \np.random.random((self.hiden_count, self.out_count)) - 0.1# 隐藏层偏置向量self.hiden_offset = np.zeros(self.hiden_count)self.out_offset = np.zeros(self.out_count)# 输入层学习率.self.in_rate = in_rate# 隐藏层学习率self.hiden_rate = hiden_ratedef train(self,train_img_pattern, train_label):if self.in_count != len(train_img_pattern[0]):sys.exit("输入层维数与样本维数不等")for i in range(len(train_img_pattern)):if i % 5000 == 0:print(i)# 生成目标向量target = [0] * 10target[train_label[i][0]] = 1# 前向传播# 隐藏层值等于输入层 * w1 + 隐藏层偏置hiden_value = np.dot(train_img_pattern[i], self.w1) + self.hiden_offsethiden_value = sigmod(hiden_value)#计算输出层的输出out_value = np.dot(hiden_value, self.w2) + self.out_offsetout_value = sigmod(out_value)# 反向更新error  = target - out_value# 计算输出层误差out_error = out_value * (1 - out_value) * error# 计算隐藏层误差hiden_error = hiden_value * \(1 - hiden_value) * np.dot(self.w2, out_error)# 更新w2 ,w2是j行k列的矩阵,存储隐藏层到输出层的权值for k in range(self.out_count):# 更新w2第k列的值,连接隐藏层所有节点到输出层的第k个节点的边# 隐藏层学习率*输入层误差*隐藏层的输出值self.w2[:, k] += self.hiden_rate * out_error[k] * hiden_value# 更新w1for j in range(self.hiden_count):self.w1[:, j] += self.in_rate * \hiden_error[j] * train_img_pattern[i]# 更新偏置向量self.out_offset += self.hiden_rate * out_errorself.hiden_offset += self.in_rate * hiden_errordef test(self, test_img_pattern):"""测试神经网络的正确率:param test_img_pattern::return:"""right = np.zeros(10)test_sum = 0for num in range(10):num_count = len(test_img_pattern[num])test_sum += num_countfor t in range(num_count): #数字num的第t张图片hiden_value = np.dot(test_img_pattern[num][t],self.w1) + self.hiden_offsethiden_value = sigmod(hiden_value)out_value = np.dot(hiden_value,self.w2) + self.out_offsetout_value = sigmod(out_value)if np.argmax(out_value) == num:# 识别正确right[num] += 1print("数字%d的识别正确率%f" % (num, right[num] / num_count))# 平均识别率print("平均识别率为: ", sum(right) / test_sum)def run():# 读入训练集train, train_label = get_train_pattern()# 读入测试图片test_pattern = get_test_pattern()# 神经网络配置参数in_coount = 28 * 28hiden_count = 6out_count = 10in_rate = 0.1hiden_rate = 0.1bpnn = BPNetwork(in_coount, hiden_count, out_count, in_rate, hiden_rate)bpnn.train(train,train_label)bpnn.test(test_pattern)if __name__ == "__main__":run()

喜欢我的可以关注我,我们可以一起交流学习

微信公众号:
在这里插入图片描述

让我爱上它Computer

qq群:473989408

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31949.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工神经网络推理机制,bp神经网络公式推导

Recurrent network 的backpropagation公式 怎么样推导出来 反向传播算法(Backpropagation)是目前用来训练人工神经网络(ArtificialNeuralNetwork,ANN)的最常用且最有效的算法。 其主要思想是:&#xff08…

BP神经网络理解及公式推导

BP神经网络理解及公式推导 __508任务 仅个人学习记录使用,可能有误 一、人工神经网络 人工神经网络(ANN)是一种旨在模仿人脑结构及其功能的由多个非常简单的处理单元彼此按某种方式相互连接而形成的计算机系统,该系统靠其状态对…

特斯拉面试,工控经典PLC题目:一键启动功能实现解法分析,少个坑,给自己多个机会

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、问题分析:二、模拟运行三、还有没有更简单的 前言 PLC 面试经典题目,一键启动功能:单个按钮按下一次控制灯亮起&#x…

使用调色板修改png图片

这个算法是参考一位高人的文章,直接读取并修改png格式图片的调色板,然后生成新的调色板替代原来的。
这样可以实现游戏中常见的变色效果,可以解决游戏容量有限,不能存放太多精灵图片的问题。 具体过程其实并不复杂,大…

android图像处理系列之三--图片色调饱和度、色相、亮度处理

原图: 处理后: 下面贴代码: 一、图片处理层: package com.jacp.tone.view;import java.util.ArrayList;import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.gra…

图片调色学习

色相环 色相混合正红(0)正黄(60),透明度为(50%)即红黄等比例混合橙色(30) (060)/230 真实调整透明度混合出并不一定为两者均值的色相,需要选择不同的混合方法…

图片颜色调节

云区 粉色云彩: 粉色云彩: 打开星图,清新滤镜马卡龙, 调节打开智能优化, 降低光感-100(根据图片调)、 色温最高、 色调最高, 增加结构让云更清晰, 增加饱和度。 晚霞&a…

excel如何快速将英文表格翻译为中文表格

1.打开excel,如下图想要快速将英文表格翻译为中 2.首先我们全选要翻译的表格区域单元格,接着点击【DIY工具箱】 ​ 3.点击【翻译】,选择【有道翻译】 4.接着鼠标点击【开始】 5.最后点击【确定】即可 6.完成效果如下图

CV大模型应用:Grounded-Segment-Anything实现目标分割、检测与风格迁移

Grounded-Segment-Anything实现目标分割、检测与风格迁移 文章目录 Grounded-Segment-Anything实现目标分割、检测与风格迁移一、Segment-Anything介绍二、Grounded-Segment-Anything1、简介2、测试 一、Segment-Anything介绍 代码链接:https://github.com/faceboo…

计算机视觉的应用6-利用VGG模型做毕加索风格图像迁移

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用VGG模型做毕加索风格图像迁移,本文将利用VGG模型实现毕加索风格图像迁移的方法。首先,我们将简要说明图像风格迁移的原理,然后使用PyTorch框架&#xff0c…

如何让ChatGPT帮我们提高开发效率

3 天前 ChatGPT云炬学长 ​关注 ChatGPT非常可怕!才不到短短的几个月时间有上亿用户。 火爆程度以至于官方都不得不暂停plus用户的升级,以缓解压力。 ChatGPT能够发展那么快,确实是因为他真的很强大! 能帮我们做ppt、帮我们做…

《联众》并购案细节公布,海虹海外公司浮出水面(ZT)

《联众》一夜身价暴增到2亿美金,《海虹>以及联众创始人成功套现1亿美金!这是中韩国际资本合作的典范?还是海外资本的大举进攻的信号?或者就是互联网第二次井喷的前奏?在历史给予答案之前,让我们理顺并购…

微信授权登录:移动端[unionid](一)

专栏简介 💒个人主页 📄本栏目录 📖心灵鸡汤📖 生活中其实没有绝境,绝境在于你自己的心没有打开。 ✍相关博文✍ 微信分享开发:准备工作微信PC端扫码登录 如果你有…

第三方对接-微信登陆对接

对接第三方之微信登陆 由于目前市面上社交软件的使用排行来看,基本上微信一马当先。因此在大多数应用上都会内置微信登陆的场景,这时候我们就非常有必要熟悉微信的登录流程。 微信登陆 微信官方开发文档说明目前移动应用上微信登录仅支持原生登陆方式…

对三大数学软件 Mathematica 、Maple 、MATLAB 的小测试比较

今天一时兴起,突然想试试几个数学软件的功能,就测试了一个不定积分,看看哪个算得最好,最简洁。 计算: 以下计算结果我都一一验算了。 1).先在Mathematica(我用的是在线的wolframalpha)中计算,结…

【计算机图形学(译)】 二、各种各样的数学

【计算机图形学(译)】 二、各种各样的数学 2 各种各样的数学 Miscellaneous Math2.1 集合和映射 Sets and Mapping2.1.1 反向映射 Inverse Mappings2.1.2 区间 Intervalsoft2.1.3 对数 Logarithms 2.2 解二次方程 Solving Quadratic Equations2.3 三角学 Trigonomet…

和托托一起学计算机图形学(一)-初识计算机图形学

文章目录 初识计算机图形学一、计算机科学与视觉信息处理二、计算机图形学的应用三、总结 数字图像基础一、像素二、RGB和CMY颜色模型三、颜色编码四、查色表五、图像文件六、总结 初识计算机图形学 一、计算机科学与视觉信息处理 计算机图形学:建模(建…

如何使用 ChatGPT 掌握讲故事的艺术

想出一个故事情节,虽然有时很有趣,但可能是一个耗时的过程。或者你可能会发现自己遇到了作家的障碍——每个作家存在的祸根。 这个重要的灵感火花是 ChatGPT 可以提供帮助的地方。OpenAI流行的文本生成聊天机器人可以协助写作过程的任何部分&#xff0c…

仅剩1位73岁开发者苦撑!能求解超复杂物理方程式的计算程序,要没人维护了...

明敏 Alex 发自 凹非寺量子位 | 公众号 QbitAI 高能物理先进计算必备程序之一,快要没人维护了。 随着唯一的长期维护者达到73岁高龄,计算系统FORM的命运开始变得扑朔迷离起来。 过去30多年,这个程序被视为粒子物理学研究的基础工具之一&#…

苹果的头显,只要看一眼就行

阅读本文大概需要 1.66 分钟。 今年的 WWDC23 开发者大会,不少人表示 iOS 更新了个寂寞,但 Vision Pro 头显却意外吸引眼球,看来苹果工程师都忙着搞头显去了。 苹果的头显终于还是来了,关于它的传闻,似乎这几年从未间断…