深度学习python实现

本文是基于Python的深度学习理论与实践学习笔记,重点介绍神经网络的结构、激活函数、矩阵运算、输出层设计、梯度参数更新。通过实例展示了Sigmoid、ReLU函数的实现,以及Affine层、softmax函数和AdaGrad优化器的代码。使用sklearn的digits数据集进行训练,并绘制了学习曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

本文是看深度学习入门(基于python的理论与实现)这本书所做的学习笔记。本文忽略了神经网络的数学原理,着重于代码实现。

神经网络结构

神经网络结构由输入层,中间层,输出层组成。神经网络的基本构架如下图所示:

                                                                   

实现一个简单的神经网络主要实现激活函数,负责层与层之间的矩阵运算部分,输出函数这些部分的前向传播和误差后向传播,还有参数更新有损失函数部分。本文中后向传播backward() 函数返回的是参数梯度变化的值,公式的推导使用的是图计算。

激活函数

神经网络的激活函数主要有Sigmoid,ReLU函数等。

Sigmoid函数为:​h\left(x\right)=\frac1{1+exp\left(-x\right)}

ReLU函数为:​h\left(x\right)=\left\{\begin{array}{l}x\;\;\;\left(x>0\right)\\0\;\;\;\;(x\leq0)\end{array}\right.

下图为几种激活函数的比较:

 

 

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()  # 产生一个备份
 &
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值