Pytorch官方教程学习笔记6:完整训练一个模型

数据处理

PyTorch 有两个用于处理数据的基本工具:torch.utils.data.DataLoadertorch.utils.data.DatasetDataset 用于存储样本及其对应的标签,而 DataLoader 则为 Dataset 提供一个可迭代的包装器

import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor

PyTorch 提供了特定领域的库,例如 TorchText、TorchVision 和 TorchAudio,所有这些库都包含数据集。本教程中,我们将使用一个 TorchVision 数据集。

torchvision.datasets 模块包含许多真实视觉数据的 Dataset 对象,例如 CIFAR 和 COCO(完整列表请查看此处)。在本教程中,我们使用 FashionMNIST 数据集。每个 TorchVision 数据集都包含两个参数:transformtarget_transform,分别用于修改样本和标签。

# Download training data from open datasets.
training_data = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor(),
)

# Download test data from open datasets.
test_data = datasets.FashionMNIST(
    root="data",
    train=False,
    download=True,
    transform=ToTensor(),
)

我们已经下载了数据集FashionMNIST训练集和测试集并分别下载入training_data和test_data。接下来我们将数据集 (Dataset) 作为参数传递给 DataLoaderDataLoader 为数据集提供一个可迭代的包装,并支持自动批处理、采样、打乱顺序以及多进程数据加载。在这里,我们定义了一个批大小为64,即 dataloader 中的每个元素将返回包含64个特征和标签的批次。

batch_size = 64

# Create data loaders.
train_dataloader = DataLoader(training_data, batch_size=batch_size)
test_dataloader = DataLoader(test_data, batch_size=batch_size)

for X, y in test_dataloader:
    print(f"Shape of X [N, C, H, W]: {X.shape}")
    print(f"Shape of y: {y.shape} {y.dtype}")
    break

输出结果:

Shape of X [N, C, H, W]: torch.Size([64, 1, 28, 28])
Shape of y: torch.Size([64]) torch.int64

创建模型

在 PyTorch 中定义神经网络时,我们创建一个继承自 nn.Module 的类。在 __init__ 函数中定义网络的各层结构,并在 forward 函数中指定数据如何通过网络。为加速神经网络中的运算,如果有可用的 GPU 或 MPS(苹果芯片的加速器),我们会将网络移动到该设备上运行。

# Get cpu, gpu or mps device for training.
device = (
    "cuda"
    if torch.cuda.is_available()
    else "mps"
    if torch.backends.mps.is_available()
    else "cpu"
)
print(f"Using {device} device")

# Define model
class NeuralNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.flatten = nn.Flatten()
        self.linear_relu_stack = nn.Sequential(
            nn.Linear(28*28, 512),
            nn.ReLU(),
            nn.Linear(512, 512),
            nn.ReLU(),
            nn.Linear(512, 10)
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

model = NeuralNetwork().to(device)
print(model)

运行结果:

Using cuda device
NeuralNetwork(
  (flatten): Flatten(start_dim=1, end_dim=-1)
  (linear_relu_stack): Sequential(
    (0): Linear(in_features=784, out_features=51
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值