news 2026/6/15 4:34:22

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/15 11:41:31

ERNIE 4.5:3000亿参数大模型如何用2-bit量化技术重塑企业AI格局

ERNIE 4.5:3000亿参数大模型如何用2-bit量化技术重塑企业AI格局 【免费下载链接】ERNIE-4.5-300B-A47B-PT 项目地址: https://ai.gitcode.com/hf_mirrors/baidu/ERNIE-4.5-300B-A47B-PT 导语 百度ERNIE 4.5系列大模型以"3000亿参数能力,47…

作者头像 李华
网站建设 2026/6/15 11:51:11

从客服困境到智能突破:FastGPT如何重塑企业微信服务体验

从客服困境到智能突破:FastGPT如何重塑企业微信服务体验 【免费下载链接】FastGPT labring/FastGPT: FastGPT 是一个基于PyTorch实现的快速版GPT(Generative Pretrained Transformer)模型,可能是为了优化训练速度或资源占用而设计…

作者头像 李华
网站建设 2026/6/15 11:51:16

4、主机安全保障全攻略

主机安全保障全攻略 在当今数字化时代,主机安全至关重要。它涵盖了从系统设置到日常管理,再到安全补丁安装等多个方面。下面将详细介绍保障主机安全的几个关键目标及具体操作方法。 1. 限制对服务器系统的物理访问 如果服务器未受到保护,防止未经授权的物理访问,即使软件…

作者头像 李华
网站建设 2026/6/11 20:26:48

如何在虚拟机装一个pe系统

文章目录 前言 一、准备pe镜像 二、虚拟机挂载iso镜像 总结 前言 当演示到pe系统的时候,插上u盘拍照还是截图,当然是虚拟机更方便一点~今天就聊一下虚拟机如何装一个pe系统,再聊之前可以看一下以前虚拟机的安装教程下面是文章地址: 如何安装虚拟机 当然这个方法可以克隆到…

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

全面掌握CNN卷积神经网络:从入门到实战的完整指南 [特殊字符]

全面掌握CNN卷积神经网络:从入门到实战的完整指南 🚀 【免费下载链接】CNN卷积神经网络讲解50多页PPT详细介绍 本PPT深入浅出地讲解了卷积神经网络(CNN)的核心原理与应用,涵盖从基础结构到卷积、池化等操作的详细解析&…

作者头像 李华
网站建设 2026/6/14 18:42:44

你不是没人爱,只是没遇到对的人

总有人在深夜里 emo,觉得自己像座孤岛,身边热闹喧嚣,却没有一个能懂自己的人。其实,你不是没人爱,只是还没在茫茫人海中,遇到那个频率相同的 “对的人”。喜欢周末去海边看潮起潮落,却总找不到同…

作者头像 李华