前言

学习深度学习我们应该从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

Bp算法公式推导推导-详解相关推荐

  1. 神经网络中BP算法的推导

    神经网络BP算法的推导 有关BP算法推导的文章数不胜数,但是好多只讲到了单样本的BP算法的推导,有些虽然讲到了多样本的BP算法的推导,但是没讲清楚甚至是讲错了的都有一些. 1. 单样本BP算法推导 关 ...

  2. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

  3. Diffusion model(二): 训练推导详解

    接上文 Diffusion model(一): 公式推导详解 Diffusion model(二): 训练推导详解 Diffusion model(三): 公式结论 Diffusion的训练推导 1. ...

  4. LPG-PCA算法实现与详解

    LPG-PCA算法实现与详解 LPG-PCA算法概要 LPG(局部像素分组) PCA(主成分分析) 算法核心思想 分阶段执行 灰度图像与彩色图像 LPG-PCA算法实现与代码详解 代码效果展示 结语 ...

  5. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  6. DL之AlexNet:AlexNet算法的架构详解、损失函数、网络训练和学习之详细攻略

    DL之AlexNet:AlexNet算法的架构详解.损失函数.网络训练和学习之详细攻略 相关文章 Dataset:数据集集合(CV方向数据集)--常见的计算机视觉图像数据集大集合(建议收藏,持续更新) ...

  7. DL之ShuffleNet:ShuffleNet算法的架构详解

    DL之ShuffleNet:ShuffleNet算法的架构详解 相关文章 DL之ShuffleNet:ShuffleNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL之Shuf ...

  8. DL之MobileNetV2:MobileNetV2算法的架构详解(包括ReLu的意义)

    DL之MobileNet V2:MobileNetV2算法的架构详解 相关文章 DL之MobileNetV2:MobileNetV2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL ...

  9. DL之SqueezeNet:SqueezeNet算法的架构详解

    DL之SqueezeNet:SqueezeNet算法的架构详解 相关文章 DL之SqueezeNet:SqueezeNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL之Sque ...

  10. ​​​​​​​DL之ResNeXt:ResNeXt算法的架构详解

    DL之ResNeXt:ResNeXt算法的架构详解 相关文章 DL之ResNeXt:ResNeXt算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL之ResNeXt:ResNeXt算 ...

最新文章

  1. PWM通过RC低通滤波器模拟DAC
  2. Ubuntu配置jdk环境变量
  3. [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)
  4. 数据分析方法有哪些?
  5. Python 基础语法(三)
  6. 力扣【每日温度】leetcode-739.每日温度:单调栈解法
  7. Xshell连接远程Linux服务器失败Could not connect to ‘192.xxx.xx.xxx‘ (port 22): Connection failed.
  8. ThreadLocal 从源码角度简单分析
  9. Cheese 游戏编程:第 4 部分 (转自MSDN)
  10. unity序列帧动画
  11. java首字母变大写_Java 首字母转大写
  12. 2021暑假Leetcode刷题——Two Pointers(2)
  13. Java清空文件内容
  14. 转载~高德地图绘制图形并得到面积
  15. dlink 备份文件_D-Link路由器备份路由器配置信息教程
  16. 老婆背着我在豆瓣发帖:没事别嫁程序员!
  17. 文章选题立意新颖的一个简单妙招
  18. 开始topcoder
  19. springMVC的生命周期
  20. 使用idea编辑生产者与消费者

热门文章

  1. mysql清空数据库的所有数据
  2. MATLAB常见语法错误
  3. 解决方案 | 为什么要配置mysql环境变量以及如何配置
  4. android soundpool 封装,android使用SoundPool 播放短音效
  5. Unity中实现列表中元素随机排序
  6. lldp协议代码阅读_LLDP协议、STP协议 笔记
  7. awr报告 解读_Oracle Awr报告_awr报告解读_基础简要信息
  8. AI画家挑战毕加索,一小时画9张画,关键是居然真有人买
  9. 豪赌激光电视,海信算是赢了吗?
  10. SPSS之多因素方差分析