PyTorch学习笔记(六):PyTorch进阶训练技巧

简介: 在源数据集上预训练一个神经网络模型,即源模型创建一个新的神经网络模型,即目标模型,该模型复制了源模型上除输出层外的所有模型设计和参数给目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化改成的模型参数

PyTorch进阶训练技巧


import torch
import torch.nn as nn
import torch.nn.functional as F

1 自定义损失函数

以函数方式定义:通过输出值和目标值进行计算,返回损失值


以类方式定义:通过继承nn.Module,将其当做神经网络的一层来看待


以DiceLoss损失函数为例,定义如下:


DSC = \frac{2|X∩Y|}{|X|+|Y|}DSC=∣X∣+∣Y∣2∣X∩Y∣
class DiceLoss(nn.Module):
    def __init__(self, weight=None, size_average=True):
        super(DiceLoss,self).__init__()
    def forward(self, inputs, targets, smooth=1):
        inputs = F.sigmoid(inputs)       
        inputs = inputs.view(-1)
        targets = targets.view(-1)
        intersection = (inputs * targets).sum()                   
        dice = (2.*intersection + smooth)/(inputs.sum() + targets.sum() + smooth)  
        return 1 - dice

2 动态调整学习率

Scheduler:学习率衰减策略,解决学习率选择的问题,用于提高精度


PyTorch Scheduler策略:


lr_scheduler.LambdaLR
lr_scheduler.MultiplicativeLR
lr_scheduler.StepLR
lr_scheduler.MultiStepLR
lr_scheduler.ExponentialLR
lr_scheduler.CosineAnnealingLR
lr_scheduler.ReduceLROnPlateau
lr_scheduler.CyclicLR
lr_scheduler.OneCycleLR
lr_scheduler.CosineAnnealingWarmRestarts

使用说明:需要将scheduler.step()放在optimizer.step()后面


自定义Scheduler:通过自定义函数对学习率进行修改


3 模型微调

概念:找到一个同类已训练好的模型,调整模型参数,使用数据进行训练。


模型微调的流程

98cc7c53da94d521667da949d2a84250.png

在源数据集上预训练一个神经网络模型,即源模型

创建一个新的神经网络模型,即目标模型,该模型复制了源模型上除输出层外的所有模型设计和参数

给目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化改成的模型参数

def set_parameter_requires_grad(model, feature_extracting):
    if feature_extracting:
        for param in model.parameters():
            param.requires_grad = False
import torchvision.models as models
# 冻结参数的梯度
feature_extract = True
model = models.resnet50(pretrained=True)
set_parameter_requires_grad(model, feature_extract)
# 修改模型
num_ftrs = model.fc.in_features
model.fc = nn.Linear(in_features=512, out_features=4, bias=True)
model.fc
Linear(in_features=512, out_features=4, bias=True)
————————————————
版权声明:本文为CSDN博主「GoAI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36816848/article/details/123566362


4 半精度训练

半精度优势:减少显存占用,提高GPU同时加载的数据量

设置半精度训练:

导入torch.cuda.amp的autocast包

在模型定义中的forward函数上,设置autocast装饰器

在训练过程中,在数据输入模型之后,添加with autocast()

适用范围:适用于数据的size较大的数据集(比如3D图像、视频等)


5 总结

自定义损失函数可以通过二种方式:函数方式和类方式,建议全程使用PyTorch提供的张量计算方法。

通过使用PyTorch中的scheduler动态调整学习率,也支持自定义scheduler

模型微调主要使用已有的预训练模型,调整其中的参数构建目标模型,在目标数据集上训练模型。

半精度训练主要适用于数据的size较大的数据集(比如3D图像、视频等)。


目录
相关文章
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
PyTorch中的`nn.AdaptiveAvgPool2d()`函数用于实现自适应平均池化,能够将输入特征图调整到指定的输出尺寸,而不需要手动计算池化核大小和步长。
252 1
Pytorch学习笔记(五):nn.AdaptiveAvgPool2d()函数详解
|
3月前
|
算法 PyTorch 算法框架/工具
Pytorch学习笔记(九):Pytorch模型的FLOPs、模型参数量等信息输出(torchstat、thop、ptflops、torchsummary)
本文介绍了如何使用torchstat、thop、ptflops和torchsummary等工具来计算Pytorch模型的FLOPs、模型参数量等信息。
445 2
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(六):view()和nn.Linear()函数详解
这篇博客文章详细介绍了PyTorch中的`view()`和`nn.Linear()`函数,包括它们的语法格式、参数解释和具体代码示例。`view()`函数用于调整张量的形状,而`nn.Linear()`则作为全连接层,用于固定输出通道数。
152 0
Pytorch学习笔记(六):view()和nn.Linear()函数详解
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
这篇博客文章详细介绍了PyTorch中的nn.MaxPool2d()函数,包括其语法格式、参数解释和具体代码示例,旨在指导读者理解和使用这个二维最大池化函数。
214 0
Pytorch学习笔记(四):nn.MaxPool2d()函数详解
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
本文介绍了PyTorch中的BatchNorm2d模块,它用于卷积层后的数据归一化处理,以稳定网络性能,并讨论了其参数如num_features、eps和momentum,以及affine参数对权重和偏置的影响。
331 0
Pytorch学习笔记(三):nn.BatchNorm2d()函数详解
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch学习笔记(二):nn.Conv2d()函数详解
这篇文章是关于PyTorch中nn.Conv2d函数的详解,包括其函数语法、参数解释、具体代码示例以及与其他维度卷积函数的区别。
388 0
Pytorch学习笔记(二):nn.Conv2d()函数详解
|
16天前
|
机器学习/深度学习 人工智能 PyTorch
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
本文将系统阐述DPO的工作原理、实现机制,以及其与传统RLHF和SFT方法的本质区别。
68 22
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
|
3月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
538 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
4月前
|
并行计算 PyTorch 算法框架/工具
基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练
文章介绍了如何在CUDA 12.1、CUDNN 8.9和PyTorch 2.3.1环境下实现自定义数据集的训练,包括环境配置、预览结果和核心步骤,以及遇到问题的解决方法和参考链接。
183 4
基于CUDA12.1+CUDNN8.9+PYTORCH2.3.1,实现自定义数据集训练
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
Pytorch学习笔记(八):nn.ModuleList和nn.Sequential函数详解
PyTorch中的nn.ModuleList和nn.Sequential函数,包括它们的语法格式、参数解释和具体代码示例,展示了如何使用这些函数来构建和管理神经网络模型。
217 1