pytorch学习笔记(五)——torchvision.datasets数据集的使用

本文介绍了torchvision库在PyTorch中的作用,特别关注其在计算机视觉任务中的数据集处理,如CIFAR10。通过示例展示了如何下载、解压并应用数据转换,同时利用tensorboard展示数据集样本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. torchvision

torchvision是pytorch工程的一部分,主要用于视觉方面的一个包,包括流行的数据集、模型架构和用于计算机视觉的常见图像转换torchvision.transforms
torchvision官网页面(从pytorch官网docs点开)

2. torchvision.datasets常见的数据集

在这里插入图片描述

3. 数据集的使用——以CIFAR10为例

import torchvision

# CIFAR10数据集包括60000张32×32的彩色图片,属于10个类型
from torch.utils.tensorboard import SummaryWriter

dataset_transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor()
])

# 下载CIFAR10数据集的压缩文件及解压,存储到./dataset路径(分别下训练数据集和测试数据集),并且对数据集中的所有图片做transform转换
train_set = torchvision.datasets.CIFAR10(root="./datasets", train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./datasets", train=False, transform=dataset_transform, download=True)

# 测试输出一下数据集信息
# print(test_set.classes)
# print(test_set[0])
# img, target = test_set[0]
# print(img)
# print(target)
# print(test_set.classes[target])
# img.show()

# 放在tensorboard里展示一下
writer = SummaryWriter("p10")
for i in range(10):
    img, target = test_set[i]
    writer.add_image("test_set", img, i)
writer.close()

 

官网可以查到用法
在这里插入图片描述

### 关于 PyTorch 中与“土堆”相关的实现 在 PyTorch 的学习资源中,“小土堆”的教程是一个非常受欢迎的教学系列,尤其是在 B 站上发布的《PyTorch 学习笔记》[^1]。该系列涵盖了从基础到高级的各种主题,适合初学者快速入门并深入理解 PyTorch。 #### 一、核心概念解析 1. **数据预处理** 使用 `transforms.ToTensor()` 可以轻松地将 PIL 图像或 NumPy 数组转换为 PyTorch 能够处理的张量类型。这是构建深度学习模型的第一步,通常用于加载和准备训练数据集。 2. **自定义模型结构** 继承 `nn.Module` 是构建神经网络的核心方法之一[^2]。通过这种方式,开发者能够灵活设计自己的模型架构,并利用框架内置的功能完成参数管理和其他操作。 3. **环境配置技巧** 如果您使用 Anaconda 创建新的 Python 环境,则可以通过命令行激活目标环境后运行特定包安装指令来设置 Jupyter Notebook 支持[^3]。例如: ```bash conda activate your_env_name conda install nb_conda ``` 4. **CUDA 功能检测** 利用 `torch.cuda.is_available()` 函数可以判断当前设备是否支持 GPU 加速计算[^4]。此函数返回布尔值 True 或 False 表明硬件兼容情况以及驱动程序状态正常与否。 #### 二、实际案例演示——手写数字识别 MNIST 数据集分类器 以下是基于上述理论知识编写的一个简单示例代码片段: ```python import torch from torchvision import datasets, transforms from torch.utils.data import DataLoader import torch.nn as nn import torch.optim as optim # 定义超参数 batch_size = 64 learning_rate = 0.01 epochs = 5 # 数据变换规则 transform = transforms.Compose([ transforms.ToTensor(), # 将图片转成 Tensor 并缩放到 [0,1] 区间 ]) # 下载 MNIST 数据集 train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True) test_dataset = datasets.MNIST(root='./data', train=False, transform=transform) # 构建 Data Loader train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) # 自定义 CNN 模型 class SimpleCNN(nn.Module): # 继承 nn.Module 基类 def __init__(self): super(SimpleCNN, self).__init__() self.conv_layer = nn.Sequential( nn.Conv2d(1, 10, kernel_size=5), nn.MaxPool2d(2), nn.ReLU(), nn.Conv2d(10, 20, kernel_size=5), nn.Dropout2d(), nn.MaxPool2d(2), nn.ReLU() ) self.fc_layer = nn.Linear(320, 10) # 输出层有十个类别 def forward(self, x): out = self.conv_layer(x) out = out.view(-1, 320) # 展平 tensor out = self.fc_layer(out) return out model = SimpleCNN() if torch.cuda.is_available(): # 若存在可用 CUDA 设备则迁移至 GPU 上执行运算 model = model.cuda() criterion = nn.CrossEntropyLoss() # 设置损失函数 optimizer = optim.SGD(model.parameters(), lr=learning_rate) # 配置优化算法 for epoch in range(epochs): total_loss = 0 correct_predictions = 0 for data, target in train_loader: if torch.cuda.is_available(): data, target = data.cuda(), target.cuda() optimizer.zero_grad() # 清零梯度缓存 output = model(data) # 正向传播过程 loss = criterion(output, target) # 计算误差 loss.backward() # 执行反向传播更新权重 optimizer.step() # 应用梯度下降调整参数 _, predicted = torch.max(output, dim=1) total_loss += loss.item()*data.size(0) correct_predictions += (predicted == target).sum().item() avg_loss = total_loss / len(train_loader.dataset) accuracy = correct_predictions / len(train_loader.dataset)*100. print(f'Epoch {epoch+1}/{epochs}, Loss: {avg_loss:.4f}, Accuracy: {accuracy:.2f}%') print('Training completed.') ``` 以上脚本展示了如何运用 PyTorch 来解决经典的图像分类问题,其中涉及到了多个重要组件的应用场景。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值