1️⃣要求

设计一个5层的全连接网络,损失函数自由,激励函数使用sigmoid/tanh/relu,反向传播过程自己写,不能使用pytorch框架的自动求导机制,目标是实现如下函数:

2️⃣代码

import numpy as np
import matplotlib.pyplot as pltx = np.arange(-7, 5, 0.05)
y = x ** 2 + 2 * x - 3
x = x.reshape(-1, 1)
y = y.reshape(-1, 1)
N, D_in, H1, H2, H3, D_out = x.shape[0], 1, 100, 100, 100, 1w1 = 0.2*np.random.randn(H1, D_in)
w2 = 0.2*np.random.randn(H2, H1)
w3 = 0.2*np.random.randn(H3, H2)
w4 = 0.2*np.random.randn(D_out, H3)b1 = np.random.randn(H1, 1)
b2 = np.random.randn(H2, 1)
b3 = np.random.randn(H3, 1)
b4 = np.random.randn(D_out, 1)learning_rate = 1e-5x=x.T
y=y.Tdef ReLu_dev(x):# ReLu 导数y = np.array(x, copy=True)y[x > 0] = 1.y[x <= 0] = 0.return y
for it in range(2000):# forward passHlayer1 = w1.dot(x)+b1Hlayer1_A = np.maximum(Hlayer1, 0)Hlayer2 = w2.dot(Hlayer1_A)+b2Hlayer2_A = np.maximum(Hlayer2, 0)Hlayer3 = w3.dot(Hlayer2_A)+b3Hlayer3_A = np.maximum(Hlayer3, 0)y_pred = w4.dot(Hlayer3_A)+b4# compute lossloss = 0.5*np.square(y_pred-y).sum()print(it, loss)error_y_pred = (y_pred-y)grad_w4 = np.dot(error_y_pred,Hlayer3_A.transpose())error_hlayer3 = np.dot(w4.transpose(), error_y_pred) * ReLu_dev(Hlayer3)grad_w3 = np.dot(error_hlayer3, Hlayer2_A.transpose())error_hlayer2 = np.dot(w3.transpose(), error_hlayer3) * ReLu_dev(Hlayer2)grad_w2 = np.dot(error_hlayer2, Hlayer1_A.transpose())error_hlayer1 = np.dot(w2.transpose(), error_hlayer2) * ReLu_dev(Hlayer1)grad_w1 = np.dot(error_hlayer1, x.transpose())grad_b4 = np.dot(error_y_pred, np.ones((N, 1)))grad_b3 = np.dot(error_hlayer3, np.ones((N, 1)))grad_b2 = np.dot(error_hlayer2, np.ones((N, 1)))grad_b1 = np.dot(error_hlayer1, np.ones((N, 1)))# updatew1 -= learning_rate * grad_w1w2 -= learning_rate * grad_w2w3 -= learning_rate * grad_w3w4 -= learning_rate * grad_w4b1 -= learning_rate * grad_b1b2 -= learning_rate * grad_b2b3 -= learning_rate * grad_b3b4 -= learning_rate * grad_b4# show figure
plt.scatter(x, y)Hlayer1 = w1.dot(x)+b1
Hlayer1_A = np.maximum(Hlayer1, 0)Hlayer2 = w2.dot(Hlayer1_A)+b2
Hlayer2_A = np.maximum(Hlayer2, 0)Hlayer3 = w3.dot(Hlayer2_A)+b3
Hlayer3_A = np.maximum(Hlayer3, 0)y_pred = w4.dot(Hlayer3_A)+b4plt.scatter(x, y_pred)
plt.show()

3️⃣可视化

人生能有几回搏?!

BP算法(误差逆传播算法)简单实现相关推荐

  1. BP(BackPropagation)误差逆传播算法

    上篇文章介绍了多层前馈神经网络,那么这种网络是怎样训练生成的呢,BP算法就是其中一种生成多层神经网络的算法 ,又称为反向传播算法,下面来了解一下BP算法. 举例: 下图中是根据一个手写数字辨识的神经网 ...

  2. 《机器学习与数据挖掘》实验五 编程实现误差逆传播算法(BP算法)

    前言: 摘要:本文对机器学习实验五 标准BP算法的代码进行实现,如果不了解的BP算法的话,可以自行上网搜索BP算法的详解. 实验题目:编程实现误差逆传播算法(BP算法) 实验目的:掌握误差逆传播算法( ...

  3. BP算法误差逆传播参数更新公式推导

    BP算法误差逆传播参数更新公式推导

  4. 人工智能知识全面讲解:多层神经网络与误差逆传播算法

    7.3.1 从单层到多层神经网络 明斯基教授曾表示,单层神经网络无法解决异或问题,但是当增加一个计 算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分 类效果.只是两层神经网络的计算 ...

  5. 误差逆传播算法公式理解及推导

    前言:公式理解及推导参考自<机器学习>周志华 P101 BP网络 BP网络一般是指由 误差逆传播(error BackPropagation, BP)算法训练的多层前馈神经网络. 给定训练 ...

  6. BP神经网络模型与学习算法

    转载自:http://www.cnblogs.com/wentingtu/archive/2012/06/05/2536425.html 一,什么是BP "BP(Back Propagati ...

  7. 508任务:对BP算法(反向传播算法 )理解与5.13式推导

    误差逆传播算法是如今最成功,应用广泛的针对多层网络的学习算法,如今的许多学习算法都是它的变体与优化.不过初学很难理解,我也是学了不少时间才慢慢理解. 推荐大家观看3Blue1Brown的3个关于深度学 ...

  8. 神经网络算法的应用领域,神经元网络算法的思想

    1.人工神经网络的发展 现代意义上对神经网络(特指人工神经网络)的研究一般认为从1943年美国芝加哥大学的生理学家W.S. McCulloch和W.A. Pitts提出M-P神经元模型开始,到今年正好 ...

  9. 神经网络是算法还是模型,神经元网络算法的思想

    神经网络算法原理 4.2.1概述人工神经网络的研究与计算机的研究几乎是同步发展的. 1943年心理学家McCulloch和数学家Pitts合作提出了形式神经元的数学模型,20世纪50年代末,Rosen ...

  10. 神经网络算法原理图解,神经网络算法原理图集

    神经网络算法原理 一共有四种算法及原理,如下所示:1.自适应谐振理论(ART)网络自适应谐振理论(ART)网络具有不同的方案.一个ART-1网络含有两层一个输入层和一个输出层. 这两层完全互连,该连接 ...

最新文章

  1. 华为云微服务引擎CSE大量新特性上线,诚邀您免费体验
  2. 一手好牌打的稀烂,如今面临倒计时,网友哭求众筹活下去...
  3. 【Java】泛型中 extends 和 super 的区别?
  4. carsim学习笔记4——路面的一些设置1
  5. Leetcode题库191.位1的个数(C实现)
  6. 幻想乡三连A:五颜六色的幻想乡
  7. mysql安装版卸载_MYSQL安装与卸载(一)
  8. JavaScript常见笔试题分析
  9. linux怎样安装麒麟双系统,U盘启动中标麒麟V6双系统安装教程
  10. 学习python菜鸟教程
  11. 论文阅读——SIPP: Safe Interval Path Planning for Dynamic Environments
  12. Camera Link协议解析图文及视频
  13. 记一次学习爬取豆瓣数据于Excel表的爬虫
  14. java连接mysql lookup_Java数据库连接池lookup用法
  15. 少时诵诗书所所所所所所所所所所所所所所所
  16. Docker搭建个人网盘和私人仓库,创建Dockerfile制作镜像
  17. 事务是什么?干什么用?
  18. 计算机控制系统康波答案,计算机控制系统部分习题参考答案1
  19. [Android Studio 日常奇怪问题记录] 之Failed to resolve: com.github.chrisbanes:PhotoView:1.2.6
  20. 集米社浅谈下那些令网兼者疯狂的时代。

热门文章

  1. 利用python将微信聊天记录生成词云
  2. 手机英文上面的逗号怎么打_英文中关于逗号使用方法
  3. 制作目标在背景中具有移动效果的视频
  4. 排列组合的写法_排列组合公式探究
  5. win10开机无响应 无服务器,win10开机假死-状态栏和开始菜单无响应
  6. .com域名好抢注吗?抢注.com域名有哪些技巧?
  7. 判断合法标识符(c语言或c++)
  8. 4条地铁线,乘船到西站!杭州西站枢纽综合交通规划设计方案出炉
  9. python爬取笔趣阁小说
  10. 苹果库乐队怎么玩_iPhone实用技巧:怎么将抖音上的背景音乐制作成手机铃声