当前位置: 首页 > news >正文

深度学习(13)-PyTorch 数据转换

在 PyTorch 中,数据转换是一种在加载数据时对数据进行处理的机制,将原始数据转换成适合模型训练的格式,主要通过 torchvision.transforms 提供的工具完成。

数据转换不仅可以实现基本的数据预处理(如归一化、大小调整等),还能帮助进行数据增强(如随机裁剪、翻转等),提高模型的泛化能力。

1. 为什么需要数据转换?

数据预处理

  • 调整数据格式、大小和范围,使其适合模型输入。
  • 例如,图像需要调整为固定大小、张量格式并归一化到 [0,1]。

数据增强

  • 在训练时对数据进行变换,以增加多样性。
  • 例如,通过随机旋转、翻转和裁剪增加数据样本的变种,避免过拟合。

灵活性

  • 通过定义一系列转换操作,可以动态地对数据进行处理,简化数据加载的复杂度。

在 PyTorch 中,torchvision.transforms 模块提供了多种用于图像处理的变换操作。

2. 基础变换操作

在这里插入图片描述

1. ToTensor

将 PIL 图像或 NumPy 数组转换为 PyTorch 张量。同时将像素值从 [0, 255] 归一化为 [0, 1]。

from torchvision import transformstransform = transforms.ToTensor()

2. Normalize

对数据进行标准化,使其符合特定的均值和标准差。通常用于图像数据,将其像素值归一化为零均值和单位方差。

transform = transforms.Normalize(mean=[0.5], std=[0.5])  # 归一化到 [-1, 1]

3. Resize

调整图像的大小。

transform = transforms.Resize((128, 128))  # 将图像调整为 128x128

4. CenterCrop

从图像中心裁剪指定大小的区域。

transform = transforms.CenterCrop(128)  # 裁剪 128x128 的区域

3. 数据增强操作

在这里插入图片描述

1. RandomCrop

从图像中随机裁剪指定大小。

transform = transforms.RandomCrop(128)

2. RandomHorizontalFlip

以一定概率水平翻转图像。

transform = transforms.RandomHorizontalFlip(p=0.5)  # 50% 概率翻转

3. RandomRotation

随机旋转一定角度。

transform = transforms.RandomRotation(degrees=30)  # 随机旋转 -30 到 +30 度

4. ColorJitter

随机改变图像的亮度、对比度、饱和度或色调。

transform = transforms.ColorJitter(brightness=0.5, contrast=0.5)

4. 组合变换

在这里插入图片描述
通过 transforms.Compose 将多个变换组合起来。

transform = transforms.Compose([transforms.Resize((128, 128)),transforms.RandomHorizontalFlip(p=0.5),transforms.ToTensor(),transforms.Normalize(mean=[0.5], std=[0.5])
])

5. 自定义转换

如果 transforms 提供的功能无法满足需求,可以通过自定义类或函数实现。

class CustomTransform:def __call__(self, x):# 这里可以自定义任何变换逻辑return x * 2transform = CustomTransform()

6. 实例

1. 对图像数据集应用转换

加载 MNIST 数据集,并应用转换。

from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 定义转换
transform = transforms.Compose([transforms.Resize((128, 128)),transforms.ToTensor(),transforms.Normalize(mean=[0.5], std=[0.5])
])# 加载数据集
train_dataset = datasets.MNIST(root='./data', train=True, transform=transform, download=True)# 使用 DataLoader
train_loader = DataLoader(dataset=train_dataset, batch_size=32, shuffle=True)# 查看转换后的数据
for images, labels in train_loader:print("图像张量大小:", images.size())  # [batch_size, 1, 128, 128]break

输出结果为:

图像张量大小: torch.Size([32, 1, 128, 128])

2. 可视化转换效果

以下代码展示了原始数据和经过转换后的数据对比。

import matplotlib.pyplot as plt
from torchvision import datasets
from torchvision import datasets, transforms# 原始和增强后的图像可视化
transform_augment = transforms.Compose([transforms.RandomHorizontalFlip(),transforms.RandomRotation(30),transforms.ToTensor()
])# 加载数据集
dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform_augment)# 显示图像
def show_images(dataset):fig, axs = plt.subplots(1, 5, figsize=(15, 5))for i in range(5):image, label = dataset[i]axs[i].imshow(image.squeeze(0), cmap='gray')  # 将 (1, H, W) 转为 (H, W)axs[i].set_title(f"Label: {label}")axs[i].axis('off')plt.show()show_images(dataset)

在这里插入图片描述

http://www.dtcms.com/a/515640.html

相关文章:

  • rocketmq实现取消超时订单?兜底方案?
  • Linux如何安装使用Rust指南
  • 田块处方图可视化(PyQt5)
  • Rust算法复杂度-大O分析
  • 2510rs,rust清单4
  • 大型网站开发考试移动商城的推广方法
  • FastAPI之 自动化的文档
  • 日常开发20251022,传统HTML表格实现图片+视频+预览
  • 标题:鸿蒙Next音频开发新篇章:深入解析Audio Kit(音频服务)
  • 湖滨区建设局网站app开发公司排行榜做软件的公司
  • UDP实现客服与客户的咨询对话
  • 学习HAL库STM32F103C8T6(实时时钟项目、WIFI天气预报项目)
  • npm、yarn、pnpm的对比和优略
  • 离散卷积,小demo(小波信号分析)
  • Java 大视界 -- Java 大数据在智能教育学习社区互动模式创新与用户活跃度提升中的应用(426)
  • 建设比较好网站服务器用来做网站和数据库
  • C# iText7与iTextSharp导出PDF对比
  • HARDWARE 属性的Bitmap与普通Bitmap,GPU与RenderThread渲染与处理方式异同比较,Android
  • 东营市做网站的公司h5学习教程
  • 不同类型的金融产品(如股票、期货、加密货币)双时间尺度优化的差异化调整
  • xtuoj Repeat One
  • ENSP Pro Lab笔记:配置STP/RSTP/MSTP(3)
  • **发散创新:模拟计算的高级应用与实现**随着科技的飞速发展,模拟计算已经成为了众多领域的核心工
  • EasyGBS如何在平安乡村搭建无线视频联网监控系统?
  • 上新!联软科技发布新一代LeagView平台,用微服务重塑终端安全
  • 【以太来袭】2. 节点设计与部署
  • 增加网站广告位建网站首页图片哪里找
  • Yolo分割数据集错误数据删除
  • Redis原理篇(一)数据结构
  • 1022作业