本文是看深度学习入门(基于python的理论与实现)这本书所做的学习笔记。本文忽略了神经网络的数学原理,着重于代码实现。
神经网络结构
神经网络结构由输入层,中间层,输出层组成。神经网络的基本构架如下图所示:
实现一个简单的神经网络主要实现激活函数,负责层与层之间的矩阵运算部分,输出函数这些部分的前向传播和误差后向传播,还有参数更新有损失函数部分。本文中后向传播backward() 函数返回的是参数梯度变化的值,公式的推导使用的是图计算。
激活函数
神经网络的激活函数主要有Sigmoid,ReLU函数等。
Sigmoid函数为:
ReLU函数为:
下图为几种激活函数的比较:
Sigmoid函数的实现代码如下所示:
class Sigmoid:
"""
Sigmoid激活函数实现正反向传播
"""
def __init__(self):
self.out = None # 反向传播需要
def forward(self, x):
"""
根据公式计算激活函数的值
"""
self.out = out = 1/(1 + np.exp(-x))
return out
def backward(self, dout):
"""
dx = dout * y * (1-y)
"""
return dout*self.out*(1-self.out)
ReLU函数 实现代码如下所示:
class Relu:
"""
Relu函数正反向传递
forward():
backward():
"""
def __init__(self):
self.mask = None
def forward(self, x):
"""
当x>0时,返回x,x<=0时返回0
x:为输入,是一个numpy类型
"""
self.mask = (x <= 0)
out = x.copy() # 产生一个备份
&