news 2026/6/10 10:51:38

PyTorch构建模型训练四部曲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PyTorch构建模型训练四部曲

下面以线性模型为例,阐述一下构建模型训练的主要步骤。

步骤:

  1. 数据准备

  2. 构建模型

  3. 构建损失函数和优化器

  4. 训练周期(前馈(计算损失)、反馈(计算梯度)、更新权重)

1 数据准备

有两种方式加载数据,第一种是把所有数据都加载到init里面,也就是读取到内存里面,然后每次使用getitem时,返回对应的项,这种方法适用于数据量不大的情况,如果是图像数据集,则需要采用别的方式,比如利用Dataset和DataLoader。

import torch from torch.utils.data import Dataset from torch.utils.data import DataLoader class DiabetesDataset(Dataset):#继承Dataset这个抽象类 def __init__(self): pass def __getitem__(self,index):#实现这个方法,可以支持下标操作 pass def __len__(self):#实现这个方法,可以返回数据集的数量 pass dataset = DiabetesDataset() train_loader = DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)

DataLoader最常见设置的四个参数:

  • 数据集对象

  • batch-size的大小

  • shuffle是否要打乱数据集

  • num_workers读取的数据时是否要使用多线程,要使用几个多线程

如果在windows中设置num_workers可能会出现运行时的错误,解决的方法是将使用loder迭代的代码封装起来(例如使用函数封装起来,而不是直接暴露在外)(pytorch0.4会有这样的问题高版本未知)

2 构建模型

使用pytorch重点不是各种求导运算,重点时构造计算图。

z=wx+b

在训练时,x和z是已知的,权重w和偏置b是我们要求的,因为我们不能确定w和b张量的形状,所以它的形状是通过z和x来确定的。

比如z是3x1的张量,x是4x1的张量,那我们就可以知道w是3x4的张量,b是3x1的张量

class LinearModel(torch.nn.Module): def __init__(self): super(LinearModel,self).__init__()#调用父类的构造函数 self.linear = torch.nn.Linear(1,1)#构造对象,它自动帮我们构造权重和偏置 def forward(self,x):#这个名称是固定的,前向传播必须这么写 y_pred = self.linear(x) return y_pred model = LinearModel()#模型实例化

3 构建损失函数和优化器

PyTorch提供了很多损失函数和优化器,可以根据模型和需要自行选择。

cirterion = torch.nn.MSELoss(size_average = False)#损失函数,第一个参数是是否要求均值 optimizer = torch.optim.SGD(model.parameters(), lr=0.01)#优化器,第一个参数是找到模型的所有参数,第二个参数是设置学习率

4 写训练周期

训练周期的格式也是固定的,先将数据添加到我们构建的模型,然后计算损失(前馈过程),然后清零梯度,然后进行反向传播,更新权重(反馈和更新都是直接调用内置函数的)。

如果不使用mini-batch,那么可以直接写:

for epoch in range(100): y_pred = model(x_data)#将数据加到模型,计算模型的y loss = cirterion(y_pred,y_data)#计算损失 print(epoch,loss) optimizer.zero_grad()#清零梯度 loss.backward()#反向传播 optimizer.step()#更新权重

如果使用mini-batch,训练周期使用嵌套循环:

for epoch in range(100): for i,data in enumerate(train_loader,0): inputs, labels = data#会自动转换为张量 y_pred = model(inputs)#前馈 loss = criterion(y_pred,labels) print(epoch,i,loss.item()) optimizer.zero_grad()#反向传播 loss.backward() optimizer.step()#更新

大部分模型训练的步骤就是以上四步,就算是多层模型,需要大规模修改的地方其实就是模型构造,训练周期也可根据需要修改,但是基本步骤是不变的(前馈计算损失,反馈更新权重)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 1:06:37

终极Flang Fortran编译器:简单快速的科学计算解决方案

Flang是一款专为LLVM设计的强大Fortran语言前端编译器,为高性能科学计算和工程计算提供完整的编程解决方案。作为PGI/NVIDIA商业Fortran编译器的开源版本,Flang在保持专业性的同时提供了免费使用的优势。 【免费下载链接】flang Flang is a Fortran lang…

作者头像 李华
网站建设 2026/6/10 0:24:41

Wan2.1-I2V图像到视频生成终极指南:4步快速上手教程

Wan2.1-I2V-14B-480P-StepDistill-CfgDistill-Lightx2v是当前最先进的图像到视频生成模型,通过创新的蒸馏技术实现了4步快速推理,让普通用户也能轻松上手。本文将为您提供从环境配置到实战应用的全方位指导,帮助您在5分钟内完成部署并开始创作…

作者头像 李华
网站建设 2026/6/9 22:54:25

基于微信小程序的校园课程评价系统毕设

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于微信小程序的校园课程评价系统,以提升我国高校教学质量监控与评估的效率和效果。具体研究目的如下:构建一个…

作者头像 李华
网站建设 2026/6/10 15:21:31

使用Three.js构建互动式3D产品展示系统的完整指南

在当今数字化商业环境中,WebGL 3D渲染技术正成为产品可视化的核心驱动力。面对传统平面展示无法充分展现产品细节的挑战,Three.js框架为开发者提供了构建高性能互动式3D产品展示系统的理想解决方案。本文将深入探讨如何利用Three.js实现从基础展示到高级…

作者头像 李华
网站建设 2026/6/10 1:51:07

基于腾讯云的物联网导盲助手设计与实现(论文+源码)

1 系统方案设计 根据系统功能的设计要求,展开基于腾讯云的物联网导盲助手设计。如图2-1所示为系统总体设计框图。系统采用STM32单片机作为系统主控核心,通过红外传感器检测是否有障碍物,水滴传感器检测是否有积水,如果有障碍物或…

作者头像 李华
网站建设 2026/6/10 12:45:09

51单片机学习终极指南:从零基础到项目实战的完整教程

51单片机学习终极指南:从零基础到项目实战的完整教程 【免费下载链接】新概念51单片机C语言教程高清PDF版下载 探索51单片机的世界,从入门到精通!郭天祥老师的《新概念51单片机C语言教程》高清PDF版为您提供了全面而深入的学习资源。本教程从…

作者头像 李华