关于在51CTO上的深度学习入门课程视频(9)中的code进行解释与总结:

(1)单层神经网络:

#coding:cp936
#建立单层神经网络,训练四个样本,
import numpy as np
def nonlin(x,deriv=False): #deriv为False计算前向传播值,为True时计算反向偏导
if deriv == True:
return x*(1-x)
return 1/(1+np.exp(-x)) X = np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]]) #输入样本,四个样本,每个样本三个特征向量
y = np.array([[0,0,1,1]]).T #期望输出
np.random.seed(1)#对这句作用暂时不太了解? w = 2*np.random.random((3,1))-1 #使用高斯变量初始化权值,E(x)=0,D(x)=1,w的值在[-1,+1]之间; for iter in xrange(10000): #迭代一万次
l0 = X #输入给l0
l1 = nonlin(np.dot(l0,w)) #计算经过第一层后的得分函数
l1_error = y-l1 #计算Loss值,相当于损失函数的偏导
l1_grad = l1_error*nonlin(l1,True) #Loss值带入梯度公式计算梯度
w += np.dot(l0.T,l1_grad) #最终的权重梯度
print (l1)

(2)双层神经网络:

#coding:cp936
#两层神经网络
import numpy as np
def nonlin(x,deriv=False): #deriv为False时计算前向传播,为True计算反向偏导,激活函数为sigmoid函数
if deriv == True:
return x*(1-x)
return 1/(1+np.exp(-x)) X=np.array([[0,0,1],[0,1,1],[1,0,1],[1,1,1]]) #输入样本
y = np.array([[0,0,1,1]]).T #期望输出
w0 = 2*np.random.random((3,4))-1 #第一层权重
w1 = 2*np.random.random((4,1))-1 #第二层权重 for iter in xrange(10000): #迭代一万次
l0 = X
l1 = nonlin(np.dot(l0,w0)) #计算第一层后的得分
l2 = nonlin(np.dot(l1,w1)) #经过第二层后的得分
l2_error = y-l2 #计算Loss值,损失函数的偏导
l2_grad = l2_error*nonlin(l2,deriv=True)#第二层梯度,l2_error越大,第二层的梯度也越大
l1_error = l2_grad.dot(w1.T)#l1_error由l2_error迭代进来
l1_grad = l1_error*nonlin(l1,deriv=True)
w1+=l1.T.dot(l2_grad)
w0+=l0.T.dot(l1_grad)
print(l2)

summing up:这里单层网络和双层神经网络的代码中,有几个变量要注意一下;第一个是误差变量,单层网络中是l1_error,其值为y-l1(由于这里的损失函数是二次损失函数,C关于l1的偏导即是y-l1),双层网络中是l1_error和l2_error,分别对应第一层和第二层,而l1_error由l2_error反向传播得到;第二个是梯度变量,单层网络中为l1_grad,双层网络中是l1_grad和l2_grad,注意每层的梯度变量的值都由后面反向传播过来的误差变量和该层的激活函数的导数相乘得到(这里没有将该层的权值放在求梯度的式子中,是为了反向传播中迭代形式的统一性);

Deep Learning入门视频(上)_一层/两层神经网络code的更多相关文章

  1. Deep Learning入门视频(下)之关于《感受神经网络》两节中的代码解释

    代码1如下: #深度学习入门课程之感受神经网络(上)代码解释: import numpy as np import matplotlib.pyplot as plt #matplotlib是一个库,p ...

  2. Deep Learning.ai学习笔记_第一门课_神经网络和深度学习

    目录 前言 第一周(深度学习引言) 第二周(神经网络的编程基础) 第三周(浅层神经网络) 第四周(深层神经网络) 前言 目标: 掌握神经网络的基本概念, 学习如何建立神经网络(包含一个深度神经网络), ...

  3. 大牛deep learning入门教程

    雷锋网(搜索"雷锋网"公众号关注)按:本文由Zouxy责编,全面介绍了深度学习的发展历史及其在各个领域的应用,并解释了深度学习的基本思想,深度与浅度学习的区别和深度学习与神经网络之 ...

  4. 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 1、两层神经网络的单样本向量化表示与多样本向量化表示

    如上图所示的两层神经网络, 单样本向量化:                                                                                ...

  5. 基于Deep Learning 的视频识别方法概览

    深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...

  6. Asp.NET Core2.0 项目实战入门视频课程_完整版

    END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不 ...

  7. Deep Learning.ai学习笔记_第四门课_卷积神经网络

    目录 第一周 卷积神经网络基础 第二周 深度卷积网络:实例探究 第三周 目标检测 第四周 特殊应用:人脸识别和神经风格转换 第一周 卷积神经网络基础 垂直边缘检测器,通过卷积计算,可以把多维矩阵进行降 ...

  8. Deep Learning.ai学习笔记_第三门课_结构化机器学习项目

    目录 第一周 机器学习策略(1) 第二周 机器学习策略(2) 目标:学习一些机器学习优化改进策略,使得搭建的学习模型能够朝着最有希望的方向前进. 第一周 机器学习策略(1) 搭建机器学习系统的挑战:尝 ...

  9. Deep Learning.ai学习笔记_第二门课_改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周(深度学习的实践层面) 第二周(优化算法) 第三周(超参数调试.Batch正则化和程序框架) 目标: 如何有效运作神经网络,内容涉及超参数调优,如何构建数据,以及如何确保优化算法快速运行, ...

随机推荐

  1. Java连接Oracle database小结

    利用jdbc连接Oracle数据库,首先得选对jdbc的版本. jdk6需要ojdbc6.jar这个包.如果选错的话,调用isValid()这个方法时,有可能有这个异常: Exception in t ...

  2. 最新版CentOS6.5上安装部署ASP.NET MVC4和WebApi

    最新版CentOS6.5上安装部署ASP.NET MVC4和WebApi 使用Jexus5.8.1独立版 http://www.linuxdot.net/ ps:该“独立版”支持64位的CentOS ...

  3. JS判断字符串长度的5个方法

    这篇文章主要介绍了JS判断字符串长度的5个方法,并且区分中文和英文,需要的朋友可以参考下 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符)   方法一:    代码如下: String.pr ...

  4. C语言编程实现Linux命令——who

    C语言编程实现Linux命令--who 实践分析过程 who命令是查询当前登录的每个用户,它的输出包括用户名.终端类型.登录日期及远程主机,在Linux系统中输入who命令输出如下: 我们先man一下 ...

  5. Python2.7.6标准库内建函数

        Built-in Functions     abs() divmod() input() open() staticmethod() all() enumerate() int() ord( ...

  6. JAVA面向对象-多态的理解

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  7. STM32端口复用和映射

    STM32的功能引脚重映射和复用功能STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能,本文对一些在使用引脚重映射时所遇到的有关问题加以说明.我们知道每个内置外设都有若干个输入输 ...

  8. 自定义ViewGroup初步探究

    由于项目需要,实现类似于地图控件,能够让一张图标自由缩放并且在其上固定位置,标记一些地点,所以在这里,我考虑了一下,决定使用自定义ViewGroup来实现.

  9. [转]win 10 开始菜单(Win 7风格)增强工具 StartIsBack++ v1.3.4 简体中文特别版

    Windows10开始菜单增强工具StartIsBack++现已更新至v1.3.4,最近主要修复在Win10周年更新版上恢复睡眠后任务栏通知中心按钮消失的问题.升级版对StartIsBack+全新构建 ...

  10. Thinking in java学习笔记之map的应用

    Random rand = new Random(47); Map<Integer,Integer> m = new HashMap<Integer,Integer>(); f ...