pytorch学习笔记:pytorch进阶训练技巧(代码片段)

GoAI GoAI     2022-12-02     537

关键词:

PyTorch实战:PyTorch进阶训练技巧

往期学习资料推荐:

1.Pytorch实战笔记_GoAI的博客-CSDN博客

2.Pytorch入门教程_GoAI的博客-CSDN博客

本系列目录:

PyTorch学习笔记(一):PyTorch环境安装

PyTorch学习笔记(二):简介与基础知识

PyTorch学习笔记(三):PyTorch主要组成模块

PyTorch学习笔记(四):PyTorch基础实战

PyTorch学习笔记(五):模型定义、修改、保存

后续继续更新!!!!

Task05 PyTorch进阶训练技巧

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

1 自定义损失函数

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

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

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

DSC = \\frac2|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 动态调整学习率

3 模型微调

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

  • 模型微调的流程

    1. 在源数据集上预训练一个神经网络模型,即源模型
    2. 创建一个新的神经网络模型,即目标模型,该模型复制了源模型上除输出层外的所有模型设计和参数
    3. 给目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化改成的模型参数
    4. 使用目标数据集训练目标模型
  • 使用已有模型结构:通过传入pretrained参数,决定是否使用预训练好的权重

  • 训练特定层:使用requires_grad=False冻结部分网络层,只计算新初始化的层的梯度

    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)

    注:在训练过程中,model仍会回传梯度,但是参数更新只会发生在fc层。

4 半精度训练

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

  • 设置半精度训练:

    1. 导入torch.cuda.ampautocast
    2. 在模型定义中的forward函数上,设置autocast装饰器
    3. 在训练过程中,在数据输入模型之后,添加with autocast()
  • 适用范围:适用于数据的size较大的数据集(比如3D图像、视频等)

5 总结

  1. 自定义损失函数可以通过二种方式:函数方式和类方式,建议全程使用PyTorch提供的张量计算方法。
  2. 通过使用PyTorch中的scheduler动态调整学习率,也支持自定义scheduler
  3. 模型微调主要使用已有的预训练模型,调整其中的参数构建目标模型,在目标数据集上训练模型。
  4. 半精度训练主要适用于数据的size较大的数据集(比如3D图像、视频等)。

 

六pytorch进阶训练技巧(代码片段)

六、PyTorch进阶训练技巧文章目录六、PyTorch进阶训练技巧1.自定义损失函数1.1.函数定义1.2.类定义1.2.1.DiceLoss1.2.2.DiceBCELoss1.2.3.IoULoss1.2.4.FocalLoss2.动态调整学习率2.1.使用官方提供的scheduler2.2.自定义scheduler3.模型微调-torchvision3.1使用... 查看详情

pytorch学习笔记:pytorch生态简介(代码片段)

PyTorch生态简介往期学习资料推荐:1.Pytorch实战笔记_GoAI的博客-CSDN博客2.Pytorch入门教程_GoAI的博客-CSDN博客本系列目录:PyTorch学习笔记(一):PyTorch环境安装PyTorch学习笔记(二):简介与基础知识Py... 查看详情

pytorch训练深度学习小技巧收集(代码片段)

1、对不同的网络层配置不同的学习率importtorchoptimizer=torch.optim.Adam([dict(params=model.conv1.parameters(),weight_decay=5e-4),dict(params=model.conv2.parameters(),weight_decay=0)],lr=args.lr)#Onlyperformweight-decayonfirstconvolution. 查看详情

pytorch训练技巧(代码片段)

Pytorch训练技巧文章目录Pytorch训练技巧1、指定GPU编号2、查看模型每层输出详情3、梯度裁剪(GradientClipping)4、扩展单张图片维度5、独热编码6、防止验证模型时爆显存7、学习率衰减8、冻结某些层的参数1、指定GPU编号设... 查看详情

pytorch模型训练实用教程学习笔记:二模型的构建(代码片段)

前言最近在重温Pytorch基础,然而Pytorch官方文档的各种API是根据字母排列的,并不适合学习阅读。于是在gayhub上找到了这样一份教程《Pytorch模型训练实用教程》,写得不错,特此根据它来再学习一下Pytorch。仓库地... 查看详情

pytorch模型训练实用教程学习笔记:一数据加载和transforms方法总结(代码片段)

前言最近在重温Pytorch基础,然而Pytorch官方文档的各种API是根据字母排列的,并不适合学习阅读。于是在gayhub上找到了这样一份教程《Pytorch模型训练实用教程》,写得不错,特此根据它来再学习一下Pytorch。仓库地... 查看详情

我是土堆-pytorch教程知识点学习总结笔记(代码片段)

此文章为【我是土堆- Pytorch教程】知识点学习总结笔记(五)包括:完整的模型训练套路(一)、完整的模型训练套路(二)、完整的模型训练套路(三)、利用GPU训练(一)、利用GPU... 查看详情

pytorch学习笔记5.torchvision库(代码片段)

PyTorch学习笔记5.torchvision加载数据集一、简介二、安装三、torchvision的主要功能示例1.加载model(1)加载几个预训练模型(2)只加载模型,不加载预训练参数(4)加载部分预训练模型(5)调整模型(6)加载非预训练模型的方法3.1.6.1保存和... 查看详情

pytorch学习笔记5.torchvision库(代码片段)

PyTorch学习笔记5.torchvision加载数据集一、简介二、安装三、torchvision的主要功能示例1.加载model(1)加载几个预训练模型(2)只加载模型,不加载预训练参数(4)加载部分预训练模型(5)调整模型(6)加载非预训练模型的方法3.1.6.1保存和... 查看详情

pytorch学习笔记2.运行官网训练推理的入门示例(代码片段)

PyTorch学习笔记2.运行官网训练、推理的入门示例一、加载数据二、创建模型torch.nn.Sequential介绍:torch.nn.Linear3.torch.nn.ReLU三、调整模型参数四、保存模型五、加载模型一、加载数据首先引用必要的库:importtorchfromtorchimportnn... 查看详情

pytorch学习笔记第五篇——训练分类器(代码片段)

文章目录1.数据2.训练图像分类器2.1加载并标准化CIFAR102.2训练图像3.定义卷积神经网络、损失函数、优化器、训练网络和保存模型4.测试自己的模型5.在GPU上进行训练1.数据通常,当您必须处理图像,文本,音频或视频... 查看详情

学习笔记《pytorch入门》完整的模型训练套路(cifar10model)(代码片段)

文章目录准备数据集(训练和测试)搭建神经网络创建损失函数,分类问题使用交叉熵创建优化器设置训练网络的一些参数进入训练循环准备进入测试步骤完整代码:准备数据集(训练和测试)训练数据集... 查看详情

pytorch模型训练实用教程学习笔记:三损失函数汇总(代码片段)

前言最近在重温Pytorch基础,然而Pytorch官方文档的各种API是根据字母排列的,并不适合学习阅读。于是在gayhub上找到了这样一份教程《Pytorch模型训练实用教程》,写得不错,特此根据它来再学习一下Pytorch。仓库地... 查看详情

pytorch学习01-训练图像分类器(代码片段)

...据测试网络总结前言  提示:本篇博客主要是记录pytorch的学习过程,当作是一个笔记来使用。  本篇内容:训练图像分类器,步骤如下:1.使用torchvision加 查看详情

深度学习理论与实战pytorch实现

课程目录:01.预备内容(入门)02.Python基础(入门)03.PyTorch基础(入门)04.神经网络(进阶)05.卷积神经网络(进阶)06.循环神经网络(进阶)07.生成对抗网络GAN(进阶)08.强化学习(进阶)09.毕业项目 下载地址:深度学习理... 查看详情

《南溪的目标检测学习笔记》——训练pytorch模型遇到显存不足的情况怎么办

1前言在目标检测中,可能会遇到显存不足的情况,我们在这里记录一下解决方案;2如何判断真正是出现显存(不是“软件误报”)当前需要分配的显存在200MiB以下,例如:RuntimeError:CUDAoutofmemory.Triedtoal... 查看详情

pytorch学习笔记3.数据集和数据加载器(代码片段)

PyTorch学习笔记3.数据集和数据加载器一、说明二、使用PyTorch预置数据集1.预置数据集FashionMNIST介绍2.加载数据集3.对数据集处理和可视化三、自定义数据集1.要实现的方法2.定义3.`__init__`4.`__len`5.`__getitem__`6.准备... 查看详情

pytorch学习笔记——多层感知机的实现(代码片段)

本文预备知识:Pytorch学习笔记(四)——torchvision工具箱目录一、FashionMNIST数据集二、torch.nn2.1nn.Module2.2nn.Sequential2.3查看神经网络的参数三、LossFunction四、torch.optim五、训练与测试附录:完整代码一、FashionMNIST数... 查看详情