PyTorch应用实战四:基于PyTorch构建复杂应用

简介: PyTorch应用实战四:基于PyTorch构建复杂应用

实验环境

torch1.8.0+torchvision0.9.0

import torch
import torchvision
print(torch.__version__)
print(torchvision.__version__)
1.8.0
0.9.0+cpu

1.PyTorch数据加载

import torchvision.transforms as tfm
from PIL import Image
img = Image.open('volleyball.png')
img_1 = tfm.RandomCrop(200, padding=50)(img)  #随机裁剪图片
img_1.show()
img_1.save('crop.png')
img_2 = tfm.RandomHorizontalFlip()(img)       #随机水平翻转图片
img_2.show()
img_2.save('flip.png')

1.1 数据预处理

torchvision.transforms

transfrom_train = tfm.Compose([
    tfm.RandomCrop(32, padding=4),
    tfm.RandomHorizontalFlip(),   
    tfm.ToTensor(),     #将图片转换为Tensor张量                       
    tfm.Normalize((0.5, 0.5, 0.5),(0.5, 0.5, 0.5))  #标准化
])

1.2 数据加载

torch.utils.data

loader = torch.utils.data.DataLoader(
    datasets, batch_size=32, shuffle=True, sampler=None,
    num_workers=2, collate_fn=None, pin_memory=True, drop_last=False
)

datasets:传入的数据集,可以是自定义的dataset对象或者torchvision中的预定义数据集对象。

batch_size:每个batch中包含的样本数量。

shuffle:是否打乱数据集。

sampler:样本抽样器,如果指定了sampler,则忽略shuffle参数。

num_workers:用于数据加载的子进程数量。

collate_fn:对样本进行批处理前的预处理函数,可用于对样本进行排序、padding等操作。

pin_memory:是否将数据加载到GPU的显存中。

drop_last:如果数据集样本数量不能被batch_size整除,则是否舍弃剩余的不足一个batch的样本。

2.PyTorch模型搭建

2.1 经典模型

torchvision.models

from torchvision import models
net1 = models.resnet50()
net2 = models.resnet50(pretrained=True)

2.2 模型加载与保存

model.load_state_dict(torch.load('pretrained_weights.pth'))
torch.save(model.state_dict(), 'model_weights.pth')

3.PyTorch优化器

3.1 torch.optim

optimizer = optim.SGD([       #SGD随机梯度下降算法
    {'params':model.base.parameters()},
    {'params':model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)
# 训练过程 
model = init_model_function()               #模型构建
optimizer = optim.SomeOptimizer(            #设置优化器
    model.parameters(), lr, mm
)
for data, label in train_dataloader:
    optimizer.zero_grad()                #前向计算前,清空原有梯度
    output = model(data)                 #前向计算
    loss = loss_function(output, label)  #损失函数
    loss.backward()                      #反向传播 
    optimizer.step()                     #更新参数

3.2 学习率调整

scheduler = optim.lr_scheduler.SomeScheduler(optimizer, *args)
for epoch in range(epochs):
    train()
    test()
    scheduler.step()

常见函数

激活单元类型

ELU MultiheadAttention SELU softshrink Softmin
Hardshrink PReLU CELU Softsign Softmax
Hardtanh ReLU GELU Tanh Softmax2d
LeakyReLU ReLU6 Sigmoid Tanhshrink LogSoftmax
LogSigmoid RReLU Softplus Threshold

损失函数层类型

L1Loss PoissonNLLLoss HingeEmbeddingLoss CosineEmbeddingLoss
MSELoss KLDivLoss MultiLabelMarginLoss MultiMarginLoss
CrossEntropyLoss BCELoss SmoothL1Loss TripletMarginLoss
CTCLoss BCEWithLogitsLoss SoftMarginLoss
NLLLoss MarginRankingLoss MultiLabelSoftMarginLoss

优化器类型

Adadelta AdamW ASGD Rprop
Adagrad SparseAdam LBFGS SGD
Adam Adamax RMSprop

变换操作类型

Compose RandomAffine RandomOrder Resize ToTensor
CenterCrop RandomApply RandomPerspective Scale Lambda
ColorJitter RandomChoice RandomResizedCrop TenCrop
FiveCrop RandomCrop RandomRotation LinearTransformation
Grayscale RandomGrayscale RandomSizedCrop Normalize
Pad RandomHorizontalFlip RandomVerticalFlip ToPILImage

数据集名称

MNIST CocoCaptions CIFAR10 Flickr8k USPS
FashionMNIST cocoDetection CIFAR100 Flickr30k Kinetics400
KMNIST LSUN STL10 VOCSegmentation HMDB51
EMNIST ImageFolder SVHN VOCDetection UCF101
QMNIST DatasetFolder PhotoTour Cityscape CelebA
FakeData ImageNet SBU SBDataset

torchvision.models中所有实现的分类模型

AlexNet VGG-13-bn ResNet-101 Densenet-201 ResNeXt-50-32x4d
VGG-11 VGG-16-bn ResNet-152 Densenet-161 ResNeXt-101-32x8d
VGG-13 VGG-19-bn SqueezeNet Inception-V3 Wide ResNet-50-2
VGG-16 ResNet-18 GoogleNet Wide ResNet-101-2
VGG-19 ResNet-34 Densenet-121 ShuffleNet-V2 MNASNet 1.0
VGG-11-bn ResNet-50 Densenet-169 MobileNet-V2


目录
相关文章
|
3月前
|
机器学习/深度学习 人工智能 PyTorch
【深度学习】使用PyTorch构建神经网络:深度学习实战指南
PyTorch是一个开源的Python机器学习库,特别专注于深度学习领域。它由Facebook的AI研究团队开发并维护,因其灵活的架构、动态计算图以及在科研和工业界的广泛支持而受到青睐。PyTorch提供了强大的GPU加速能力,使得在处理大规模数据集和复杂模型时效率极高。
187 59
|
30天前
|
机器学习/深度学习 数据采集 自然语言处理
【NLP自然语言处理】基于PyTorch深度学习框架构建RNN经典案例:构建人名分类器
【NLP自然语言处理】基于PyTorch深度学习框架构建RNN经典案例:构建人名分类器
|
2月前
|
存储 缓存 PyTorch
使用PyTorch从零构建Llama 3
本文将详细指导如何从零开始构建完整的Llama 3模型架构,并在自定义数据集上执行训练和推理。
56 1
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
TensorFlow和PyTorch的实际应用比较
TensorFlow和PyTorch的实际应用比较
|
3月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch与Hugging Face Transformers:快速构建先进的NLP模型
【8月更文第27天】随着自然语言处理(NLP)技术的快速发展,深度学习模型已经成为了构建高质量NLP应用程序的关键。PyTorch 作为一种强大的深度学习框架,提供了灵活的 API 和高效的性能,非常适合于构建复杂的 NLP 模型。Hugging Face Transformers 库则是目前最流行的预训练模型库之一,它为 PyTorch 提供了大量的预训练模型和工具,极大地简化了模型训练和部署的过程。
152 2
|
3月前
|
机器学习/深度学习 数据采集 PyTorch
构建高效 PyTorch 模型:内存管理和优化技巧
【8月更文第27天】PyTorch 是一个强大的深度学习框架,被广泛用于构建复杂的神经网络模型。然而,在处理大规模数据集或使用高性能 GPU 进行训练时,有效的内存管理对于提升模型训练效率至关重要。本文将探讨如何在 PyTorch 中有效地管理内存,并提供一些优化技巧及代码示例。
79 1
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
55 0
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
150 1
|
3月前
|
机器学习/深度学习 分布式计算 PyTorch
构建可扩展的深度学习系统:PyTorch 与分布式计算
【8月更文第29天】随着数据量和模型复杂度的增加,单个GPU或CPU已无法满足大规模深度学习模型的训练需求。分布式计算提供了一种解决方案,能够有效地利用多台机器上的多个GPU进行并行训练,显著加快训练速度。本文将探讨如何使用PyTorch框架实现深度学习模型的分布式训练,并通过一个具体的示例展示整个过程。
134 0
|
3月前
|
机器学习/深度学习 数据采集 自然语言处理
PyTorch 在自然语言处理中的应用实践
【8月更文第29天】随着深度学习技术的发展,自然语言处理(NLP)领域取得了显著的进步。PyTorch 作为一款强大的深度学习框架,因其灵活性和易用性而被广泛采用。本文将介绍如何利用 PyTorch 构建文本分类模型,并以情感分析为例进行详细介绍。
40 0