back propogation 的线代描述
参考资料:
算法部分:
standfor, ufldl : http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
一文弄懂BP:https://www.cnblogs.com/charlotte77/p/5629865.html
代码部分:
siraj raval ,4分钟搭建神经网络: http://192.168.73.134/www.sohu.com/a/162305418_697750
这是我个人学习笔记,希望其他阅读者已经学习过 ufldl关于 neural network 和 back propogation的内容。
最重要的就是 求解梯度更新公式的矩阵形式(笔记中红框中部分):



python 代码,numpy 实现:
# -*- coding=utf-8 -*- import numpy as np
r'''
build a neural network by plain numpy
loss (latex)
J(w,b) = \frac{1}{m} \sum_{i}^{m}\frac{1}{2}\left \| h_{wb}(x^{(i)}) - y^{(i)} \right \|^2 +\sum \sum \sum W^{(l)}_{(ij)} '''
def getData():
x = np.array([[0, 0, 1], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
y = np.array([0, 1, 1, 0])[:, np.newaxis]
return x, y def sigmoid(x, deriv=False):
if deriv is True:
fx = sigmoid(x)
return fx * (1.0 - fx)
else:
return 1.0 / (1.0 + np.exp(-x)) x, y = getData()
fy = sigmoid(y)
# print(fy)
# np.random.seed(30)
w1 = np.random.random([4, 3])
b1 = np.random.random([4, 1])
w2 = np.random.random([1, 4])
b2 = np.random.random([1, 1]) max_iter = 100000
nita = 0.0 # regular
step_size = 0.1 for i in range(0, max_iter):
# forward
z2 = np.dot(w1, x.T) + b1 # 4×4+4×1 (broadcasting)
a2 = sigmoid(z2)
z3 = np.dot(w2, a2) + b2[0, 0]
y_hat = sigmoid(z3) # mse
mse = (1.0 / y.shape[0]) * np.dot((y.T - y_hat).T, y.T - y_hat)[0, 0]
if i % 500 == 0 or mse < 0.0001:
print('when i=' + str(i) + '; mse:' + str(mse))
if mse < 0.0001:
break
# backward
# partial
delta_3 = (y_hat - y.T) * sigmoid(z3, deriv=True)
delta_2 = np.dot(w2.T, delta_3) * sigmoid(z2, deriv=True) partial_w2 = np.dot(delta_3, a2.T) + nita * w2
partial_b2 = np.dot(delta_3, np.ones([4, 1]))
partial_w1 = np.dot(delta_2, x) + nita * w1
partial_b1 = np.dot(delta_2, np.ones([4, 1])) # update parameter
w2 -= step_size * partial_w2
b2 -= step_size * partial_b2
w1 -= step_size * partial_w1
b1 -= step_size * partial_b1 print(y_hat)
back propogation 的线代描述的更多相关文章
- 山东理工大学第七届ACM校赛-飞花的线代 分类: 比赛 2015-06-26 10:29 10人阅读 评论(0) 收藏
飞花的线代 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 飞花壕的线代一直非常的壕(好),线代考试每次都是全班第一.一次,飞花壕在预习 ...
- hdoj 1588 学好线代与数学
按部就班,超级简单,虽然不是一次过的...错在那个long long数据问题还是要注意..也不知道要怎么注意:还是说题目吧... 思路看main函数 其他函数功能也是非常有用!代码比较丑...见谅 # ...
- NYOJ 67 三角形面积(线代,数学)
三角形面积 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积 输入 每行是一组测试数据,有6个 ...
- 线代笔记 #01# 几何水平上的理解 VS. 数值水平上的理解
源: 线性代数的本质 内容来自字幕. Let me quote without further comment from Dieudonné's "Foundations of Modern ...
- numpy--深度学习中的线代基础
参考自 微信公众号--深度学习世界(http://mp.weixin.qq.com/s?__biz=MzI4MDMwMDM3NA==&mid=2247484616&idx=1& ...
- 线代: N阶行列式
线性变换 将 (x, y) 变成 (2 x + y, x - 3 y) 就叫做线性变换, 这就是矩阵乘法, 用于表示一切线性变换. 几何上看, 把平面上的每个点 (x, y) 都变到 (2 x + y ...
- 线代第六章定义&定理整理(持续更新中)
Chapter 6 6.1 Inner Products and Norms Definition (inner product). Let V be a vector space over F. A ...
- 线特征---LSD and LBD程序运行(一)
最近在看有关特征提取的线特征,暑期就看了相关的论文:<基于点线综合特征的双目视觉SLAM方法_谢晓佳>,最近呢,把里面有关线特征提取LSD和描述子LBD的代码跑了一遍,记录如下: [1]L ...
- Thread线程源码解析,Java线程的状态,线程之间的通信
线程的基本概念 什么是线程 现代操作系统在运行一个程序的时候,会为其创建一个进程.例如,启动一个Java程序,操作系统就会创建一个Java进程.线代操作系统调度的最小单位是线程.也叫做轻量级进程.在一 ...
随机推荐
- excel打开csv 出现乱码怎么解决
CSV是逗号分隔值的英文缩写,通常都是纯文本文件.CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符.通常CSV文件可以用EXCEL正常打开,但是许多人都有这样的经历,使用EXC ...
- Linux学习笔记 - Shell 函数的使用
基本语法 funname () { action; return -)):如果不加,将以最后一条命令运行结果,作为返回值. } 示例1:定义并调用无返回值的函数 #!/bin/bash a= b= c ...
- Codeforces-591C题解
一.题目链接 http://codeforces.com/problemset/problem/591/C 二.题意 给定一个只含数字0和1的数组,通过如下方式,变成不再变化的01组合,最少需要操作几 ...
- ubuntu安装Theano+cuda
由于学习需要用到GPU加速机器学习算法,需要安装theano+cuda. 开源库的一大问题就是:难安装. 为了搞好这个配置,我是前前后后花了3天,重装了3次ubuntu重装了5次驱动才搞定. 故发此贴 ...
- django之上传图片
上传图片 当Django在处理文件上传的时候,文件数据被保存在request.FILES FILES中的每个键为<input type="file" name="& ...
- 本地YUM仓库搭建实战
YUM主要用于自动安装.升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系.要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个软 ...
- JavaScript知识总结--历史-html引用方式-基础概念
一.JavaScript简介 1.ECMAScript 1995~今已经20年的历史,产生JavaScript是需要它去解决一定的问题:在浏览器端做一些数据的验证,试想当年的网络环境,如果能够在浏览器 ...
- OpenLayers 3 之 地图视图(View)
OpenLayers 3 之 地图视图(View) 初始化一幅地图,必备的三要素之一视图(view),这个对象主要是控制地图与人的交互,如进行缩放,调节分辨率.地图的旋转等控制.也就是说每个 map对 ...
- C#并口操作
using System;using System.Runtime.InteropServices;public class PortAccess { [DllImport("inpout3 ...
- 加密算法blowfish 多语言
php加密算法blowfish <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016-02-14 * Time: ...