pytorch进阶

一、预训练模型

1、torchvision

在PyTorch中,可以使用torchvision库来加载和预处理ImageNet数据集。torchvision是PyTorch中专门用于处理图像数据的库,提供了方便的图像数据处理工具和预训练的模型,包括对ImageNet数据集的加载和预处理功能。

以下是使用torchvision加载ImageNet数据集的基本步骤:

  1. 导入必要的库:
import torch
import torchvision
from torchvision import transforms
  1. 使用torchvision.datasets.ImageNet类加载ImageNet数据集:
# 定义数据集路径
data_path = 'path_to_imagenet_dataset'

# 使用ImageNet数据集加载器
dataset = torchvision.datasets.ImageNet(root=data_path, split='train', transform=transforms.ToTensor())
  1. 使用torch.utils.data.DataLoader加载数据集并进行批量处理:
# 定义数据加载器
data_loader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True)
  1. 遍历数据加载器以获取批量的图像数据:
for images, labels in data_loader:
    # 在这里可以对图像数据进行进一步处理或传入模型进行训练
    pass

除了加载ImageNet数据集,torchvision还提供了预训练的深度学习模型,如ResNet、AlexNet、VGG等,在ImageNet上预训练的模型可以直接用于图像分类等任务。可以使用torchvision.models模块来加载预训练模型:

# 加载预训练的ResNet模型
model = torchvision.models.resnet50(pretrained=True)

通过使用torchvision库,您可以方便地加载、处理和训练ImageNet数据集,利用预训练模型进行迁移学习或其他计算机视觉任务。

2、torchtext

在PyTorch中,torchtext是一个用于自然语言处理(NLP)任务的工具库,提供了方便的文本数据处理功能,包括文本数据集的加载、预处理、分词、词向量表示等。torchtext旨在简化文本数据的处理流程,使得用户可以更容易地构建和训练NLP模型。

torchtext库主要包含以下几个核心组件:

  1. torchtext.data: 用于定义文本数据集的数据结构和数据加载方法,包括FieldExampleDataset等类。
  2. torchtext.datasets: 提供了常见的文本数据集加载方法,如IMDb、AG News、SST等数据集。
  3. torchtext.vocab: 用于构建词汇表(Vocabulary)和词向量表示。
  4. torchtext.utils: 包含一些辅助函数,用于数据预处理和其他功能。

以下是一个简单示例,展示如何使用torchtext加载文本数据集(以IMDb数据集为例):

import torchtext
from torchtext.datasets import IMDB
from torchtext.data.utils import get_tokenizer

# 定义分词器
tokenizer = get_tokenizer("basic_english")

# 加载IMDb数据集
train_iter = IMDB(split='train')

# 遍历数据集并进行分词
for label, text in train_iter:
    tokens = tokenizer(text)
    # 在这里可以对分词后的文本数据进行进一步处理

通过使用torchtext库,您可以方便地处理文本数据,并构建用于NLP任务的数据管道,从而加速模型的训练过程。

3、其他

类似的库还有torchaudio,torchServe,torchElastic等等

4、模型保存与加载

.pth文件是PyTorch中常见的模型保存文件格式,通常用于保存训练好的模型参数。.pth文件实际上是一个包含了模型参数的Python字典(dictionary),可以通过PyTorch提供的torch.save()函数保存模型参数为.pth文件,通过torch.load()函数加载.pth文件中的模型参数。

以下是一个简单示例,展示如何保存和加载PyTorch模型参数为.pth文件:

import torch
import torch.nn as nn

# 定义一个简单的神经网络模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.linear = nn.Linear(10, 1)
    
    def forward(self, x):
        return self.linear(x)

model = SimpleModel()

# 保存模型参数为.pth文件(只保存参数)
torch.save(model.state_dict(), 'model.pth')
# 下面形式保存模型结构+模型参数
torch.save(model, 'model.pth')

# 加载.pth文件中的模型参数
model.load_state_dict(torch.load('model.pth'))
# 保存模型结构+模型参数用下面恢复
model.load(torch.load('model.pth'))

二、完整模型套路

1、步骤

训练一个PyTorch模型通常包括以下几个步骤:

  1. 准备数据集:首先,你需要准备好训练数据集和测试数据集。PyTorch提供了torch.utils.data.Datasettorch.utils.data.DataLoader等工具来加载和处理数据。

  2. 构建模型:接下来,你需要定义一个神经网络模型。在PyTorch中,你可以通过创建一个继承自torch.nn.Module的类来构建自己的模型。在这个类中,你需要定义模型的结构和前向传播方法。

  3. 定义损失函数:选择合适的损失函数来衡量模型预测与真实标签之间的差异。PyTorch提供了各种损失函数,如torch.nn.CrossEntropyLosstorch.nn.MSELoss等。

  4. 定义优化器:选择一个优化算法来更新模型的参数以最小化损失函数。常见的优化器包括torch.optim.SGDtorch.optim.Adam等。

  5. 模型训练:在训练循环中,你需要遍历数据集,将数据输入模型中进行前向传播计算损失,然后反向传播更新模型参数。这个过程通常需要多个epoch来完成。

  6. 模型评估:在每个epoch结束后,你可以使用测试数据集对模型进行评估,计算模型在测试集上的准确率、精度等指标。

  7. 模型保存:训练完成后,你可以保存模型的参数以备将来使用。

这是一个简单的PyTorch模型训练的步骤指南,具体实现会根据你的任务和数据集的不同而有所不同

2、规范

一般模型定义在train.py

import torch
import torch.nn as nn

# 定义一个简单的神经网络模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.linear = nn.Linear(10, 1)
    
    def forward(self, x):
        return self.linear(x)

if __name__ == '__main__':
	# 简单验证      

数据集加载和训练在train.py

# 引入model.py中的模型
from model import * 
# 加载CIFAR-10数据集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
# 创建DataLoader
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)

# 创建模型
model = SimpleModel()

# 损失函数
loss_fn = nn.CrossEntropyLoss()

# 优化器
op = torch.optim.SGD(model.parameters(),lr=0.01)

# 设置训练网络的一些参数等
# 记录训练的次数
total_train_step = 0
# 记录测试的次数
total_test_step = 0
# 训练轮数
epoch = 10
for i in range(epoch):
	# 训练开始
	
	# 训练步骤开始
	model.train()
	for data in trainloader:
	# 具体训练
	loss = loss_fn(outputs,targets)
	
	# 优化器优化模型
	op.zero_grad()
	loss.backward()
	op.step()

	# 保存模型
	torch.save()

应用测试一般在test.py中。
利用已训练好的模型,提供输入进行测验。

from model import *
# 导入,后面参数表示GPU运行的模型放在cpu上跑
model = torch.load("xxx.pth",map_location=torch.device('cpu'))
# 测试阶段
model.eval()
with torch.no_grad():
for data in testloader:
	loss = loss_fn(outputs,targets)
	# 具体测试步骤

三、利用GPU训练

google.colab可以免费使用GPU

1、方法1

# 创建模型
model = SimpleModel()
# 放到GPU上
model = model.cuda()

# 损失函数
loss_fn = nn.CrossEntropyLoss()
loss_fn = loss_fn.cuda()

# 训练中
for data in trainloader:
	imgs,targets = data
	imgs = imgs.cuda()
	targets = targets.cuda()
	# 测试时同理

2、方法

# 指定GPU类型
device = torch.device("cpu")
device = torch.device("cuda")
# 或
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 将对象放到GPU中
model.to(device)
loss_fn = loss_fn.to(device)
imgs = imgs.to(device)
targets = targets.to(device)
  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值