当前位置: 首页 > news >正文

【AI学习从零至壹】PyTorch模型训练相关要素

PyTorch模型训练相关要素

  • 全连接神经⽹络模型结构补全
    • 激活函数
    • 归一化
    • 正则化
    • 模型结构和⽅法
    • 在这里插入图片描述
    • 优化器 Optimizer
      • 带动量的随机梯度下降
    • 神经⽹络输出层与模型任务
      • 回归任务相关损失函数
    • 分类任务相关损失函数
      • 交叉熵

)

全连接神经⽹络模型结构补全

激活函数

  • Sigmoid
    提出时间:1943年(McCulloch和Pitts在⼈⼯神经元模型中⾸次使⽤)。
    特点:输出压缩在0到1之间,具有⾮线性特性,但梯度在两端趋近于零,容易导致梯度消失问题,且输出均值不为零,可能影响训练稳定性。
    应⽤⽹络模型:早期常⽤于逻辑回归、浅层神经⽹络的分类任务,以及⽣成对抗⽹络(GANs)的输出层(⽣成概率分布)。
    使⽤普遍性:在深度学习中逐渐被ReLU等替代,但在需要概率解释的任务(如⼆分类、语⾔模型)中仍有应⽤。
  • tanh
    提出时间:1940年代(作为Sigmoid的变体被提出)。
    特点:输出范围为-1到1,均值为零,⽐Sigmoid更易训练,但仍存在梯度消失问题。
    应⽤⽹络模型:常⽤于循环神经⽹络(RNN)、⻓短期记忆⽹络(LSTM)的⻔控机制,以及早期深度神经⽹络的中间层。
    使⽤普遍性:在现代模型中逐渐被ReLU取代,但在序列建模(如⾃然语⾔处理)和某些强化学习场景中仍有使⽤。
  • ReLU
    提出时间:2012年(由Hinton团队在ImageNet竞赛中推⼴)。
    特点:计算⾼效,缓解梯度消失问题,但存在“神经元死亡ˮ现象(输⼊负时梯度为零,导致权重⽆法更新)。
    应⽤⽹络模型:⼴泛⽤于卷积神经⽹络(CNN)、残差⽹络(ResNet)、循环神经⽹络(RNN)等,是深度学习的主流激活函数。
    使⽤普遍性:⽬前最常⽤的激活函数,适⽤于⼤多数视觉、语⾔和序列任务。
  • Leaky ReLU
    提出时间:2013年(由Maas等⼈提出)。
    特点:改进ReLU的“死亡ˮ问题,当输⼊为负时保留⼩梯度(如斜率0.01),保持神经元活性。
    应⽤⽹络模型:在⽣成对抗⽹络(DCGAN)、超分辨率模型中表现良好,常⽤于替代ReLU以提升训练稳定性。
    使⽤普遍性:在需要避免ReLU缺陷的场景中普遍使⽤,是ReLU的常⻅改进版本。
  • Swish
    提出时间:2017年(由Google团队提出)。
    特点:公式为 ,结合平滑性和⾃⻔控机制,⽐ReLU更灵活,适合深层⽹络。
    应⽤⽹络模型:在Google的EfficientNet、神经架构搜索(NAS)模型中被采⽤,显著提升图像分类和⽬标检测性能。
    使⽤普遍性:近年来在⼯业界和学术界的⾼性能模型中逐渐普及,尤其在需要⾼精度的视觉任务中。
    在这里插入图片描述

归一化

归⼀化也是⼀种带有参数的归⼀化计算公式。但主要⽬的是为了稳定训练过程,加速模型收敛并减少过拟合。
在这里插入图片描述

在这里插入图片描述

#定义一个简单的BatchNorm层
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet,self).init()
        self.fc1 = nn.Linear(10,20)
        self.bn1 = nn.BatchNorm1d(20)
        self.relu = nn.ReLU()
        self.fc2 = nn.Liner(20,1)
    def forward(self,x):
        x = self.fc1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x
    
# 创建模型实例
model = SimpleNet()
  • 其它归⼀化⽅法
    除 BatchNorm 外,还有以下归⼀化操作运算
    LayerNorm:适合⻓序列数据(如 NLP),或批量较⼩的任务。
    GroupNorm:平衡 BN 和 LN,适合中等批量场景。
    SwitchableNorm:⾃适应选择归⼀化⽅式,适合动态批量场景。

正则化

正则化是⼀种数据筛选⽅法,作⽤是抑制过拟合,提升模型泛化能⼒。

  • Dropout:
    Dropout 是由 Geoffrey Hinton 等⼈在 2012 年提出的⼀种正则化技术,⽤于缓解神经⽹络的过拟合问题。
  • 原理:Dropout 的核⼼思想是在训练过程中随机“关闭(ˮ 置零)神经⽹络中的部分神经元,使得⽹络⽆法过度依赖某些特定特征。具体步骤如下:
    在这里插入图片描述
  • 作⽤
    减少过拟合:通过随机失活神经元,Dropout 迫使⽹络学习更鲁棒的特征,避免对特定神经
    元的过度依赖。
    近似模型集成:每次训练时随机失活神经元相当于训练不同的⼦⽹络,测试时将这些⼦⽹络
    的预测结果平均,类似于集成学习的效果。
    计算效率⾼:Dropout 的计算成本较低,⽆需存储额外参数,且易于在现有⽹络中实现。
import torch
import torch.nn as nn
class DropoutNet(nn.Module):
 def __init__(self):
 super(DropoutNet, self).__init__()
 self.fc1 = nn.Linear(10, 20)
 self.dropout = nn.Dropout(p=0.5) # 随机失活50%的神经元

 self.relu = nn.ReLU
 self.fc2 = nn.Linear(20, 1def forward(self, x):
 x = self.fc1(x)
 x = self.dropout(x)
 x = self.relu(x)
 x = self.fc2(x)
 return x
model = DropoutNet()

模型结构和⽅法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

优化器 Optimizer

在 PyTorch 中,优化器(optimizer)是⽤于更新神经⽹络参数的⼯具,它会根据计算得到的损失函数的梯度来调整模型的参数,通常是以最⼩化损失函数来改进模型的性能 。

  • 梯度下降GD - Gradient Descent
    在这里插入图片描述

  • 批量梯度下降BGD - Batch Gradient Descent
    批量梯度下降法是最原始的形式,就是指在每⼀次训练迭代时使⽤所有样本来进⾏梯度的更新。参数的更新⽅式和GD⼀样。
    特点:
    理想状态下经充分训练,梯度可以达到全局最优,缺点是不适合⼤样本和⼤模型。

  • ⼩批量梯度下降(Mini-batch Gradient Descent,MBGD)
    在这里插入图片描述
    在这里插入图片描述

  • 随机梯度下降SGD - Stochastic Gradient Descent
    在这里插入图片描述
    在这里插入图片描述

  • 输⼊参数说明
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5.参数更新:
    在这里插入图片描述

带动量的随机梯度下降

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • ⾃适应矩估计Adam - Adaptive Moment Estimation
    Adam算法,通过计算梯度的⼀阶矩和⼆阶矩估计来调整学习率,对不同参数设置⾃适应学习率。
    具体的我们可以看一下这个官方的介绍
    https://pytorch.org/docs/stable/generated/torch.optim.Adam.html

神经⽹络输出层与模型任务

神经⽹络模型的输出层,通常会根据训练任务的不同,⽽分为两种情况:单⼀节点的输出和多节点输出。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

回归任务相关损失函数

  • 均⽅误差(Mean Squared Error,MSE)
    在这里插入图片描述
  • 平均绝对误差(Mean Absolute Error,MAE)
    在这里插入图片描述
  • Huber损失函数
    在这里插入图片描述

分类任务相关损失函数

交叉熵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import numpy as np
arr = np.array([[0.5,1.5,0.1 
def softmax(x):
 exp = np.exp(x)
 sum_exp = np.sum(np.exp(x), axis=1, keepdims=True)
 softmax = exp / sum_exp
 return softmax
print(softmax(arr))
import torch
tensor = torch.tensor([[0.5,1.5,0.1 
print(tensor.softmax(1).numpy())

2.计算交叉熵
在这里插入图片描述

tensor = torch.tensor([[0.5,1.5,0.1 
print(tensor.log_softmax(dim=1.numpy())
# 或

m = nn.LogSoftmax(dim=1print(m(tensor).numpy())

相关文章:

  • 亚马逊云科技全面托管DeepSeek-R1模型现已上线
  • 第二节第一部分:String字符串
  • 建库字符集选择`utf8mb4` + `utf8mb4_unicode_ci` 组合
  • 第三讲 | C/C++内存管理完全手册
  • 3. 轴指令(omron 机器自动化控制器)——>MC_CamIn
  • 在VMware17中安装使用Ubuntu虚拟机
  • 数据结构笔记
  • R语言结构方程模型(SEM)在生态学领域中的应用
  • 【HTML5】02-列表 + 表格 + 表单
  • 堆外内存 OOM:现象分析与优化方案
  • kubeval结合kube-score实现k8s yaml文件校验
  • 自动化测试【Python3.7+Selenium3】
  • langgraph简单Demo3(画一个简单的图)
  • “我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验
  • 联想EMC VNX5600使用的端口
  • 爬虫(requsets)笔记
  • Java 在 运行期、源码级别 和 字节码级别 处理的对比分析,涵盖定义、实现方式、优缺点及典型应用场景
  • root无权限修改文件内容处理
  • 【性能优化点滴】odygrd/quill 中一个简单的标记位作用--降低 IO 次数
  • 京准电钟:网络安全系统时间同步的作用是什么?
  • 空间站第八批科学实验样品返抵地球并交付科学家
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 杭州挂牌临平区两宗住宅用地,起始总价约11.02亿元
  • 山西太原一小区发生爆炸,造成1人遇难21人受伤2人失联
  • 浦发银行一季度净利175.98亿增1.02%,不良率微降
  • 中方发布《不跪!》视频传递何种信息?外交部回应