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

Transforms

在 PyTorch 生态中,torchvision.transforms 是专门用于图像和视频预处理的模块,提供了丰富的变换工具,常用于数据增强、归一化和格式转换。

核心功能与组件

torchvision.transforms 主要包含三类组件:

  1. 变换类(Transform Classes):如 ResizeRandomCrop 等,用于执行具体操作。
  2. 组合工具(Compose):将多个变换按顺序连接。
  3. 功能性函数(Functional Transforms):提供低级操作(如 functional.rotate),便于自定义变换。

用图解释,transforms 如何工作 

 

如何使用transforms进行转换:

from PIL import Image
from torchvision import transformsimg_path = "dataset/train/ants/0013035.jpg"
img= Image.open(img_path)
print(img)
tensor_trans=transforms.ToTensor() #创建一个ToTensor变换对象
tensor_img=tensor_trans(img)
print(tensor_img)

 结果:

 

为什么需要tensor数据类型

 

在机器学习(尤其是深度学习)中,将图像、文本等数据转换为张量(Tensor) 数据类型是核心操作,这与算法原理、计算效率和框架设计密切相关。以下从多个角度详细解释为什么需要张量:

1. 张量是深度学习框架的 “通用语言”

主流深度学习框架(如 PyTorch、TensorFlow)的核心计算逻辑均基于张量设计:

  • 统一数据接口:无论原始数据是图像(像素矩阵)、文本(词向量)、音频(波形数组),最终都需要转换为张量才能被框架中的模型(如神经网络)处理。

  • 框架功能依赖:张量是框架中自动求导(Autograd)、GPU 加速、并行计算等核心功能的载体。例如,PyTorch 的 torch.Tensor 内置了求导跟踪机制,能自动计算神经网络反向传播时的梯度。

2. 张量的维度结构适配深度学习模型

  • 高维数据表示:现实世界的数据往往是高维的(如彩色图像是 [H, W, C] 三维,视频是 [T, H, W, C] 四维),张量天然支持任意维度的结构化表示,与卷积神经网络(CNN)、循环神经网络(RNN)等模型的输入要求完全匹配。

  • 通道优先格式:PyTorch 等框架默认使用 [C, H, W](通道在前)的张量格式,这与卷积层的计算逻辑(先对通道维度做卷积)高度契合,能减少数据格式转换的开销。

3. 张量支持高效的数值计算

  • GPU 加速:张量可以无缝迁移到 GPU 进行计算(如 tensor.cuda()),而 GPU 对并行数值运算的优化(如 CUDA 核心)能将计算速度提升数十倍甚至上百倍,这对深度学习中大规模矩阵运算(如神经网络的前向 / 反向传播)至关重要。

  • 内存优化:张量会根据数据类型(如 float32int64)高效分配内存,避免原始数据(如 PIL 图像的未压缩格式)的内存浪费。

  • 向量化运算:张量支持向量化操作(如矩阵乘法、广播机制),无需手动编写循环,既能简化代码,又能通过底层优化(如使用 cuBLAS、MKL 等线性代数库)提升计算效率。

4. 张量实现了自动求导(反向传播的基础)

深度学习的核心是通过反向传播算法优化模型参数,而张量是这一过程的 “桥梁”:

  • 梯度跟踪:PyTorch 的张量默认记录操作历史(通过 requires_grad=True),能自动计算每个参数对损失函数的梯度(即导数)。

  • 链式法则实现:张量的操作会被封装为计算图中的节点,反向传播时通过遍历计算图,利用链式法则高效求解梯度,这一过程完全由框架自动完成,无需手动推导公式。

5. 与原始数据格式的对比:为什么不用 PIL 图像或 NumPy 数组?

数据类型

局限性

张量的优势

PIL 图像

仅支持图像表示,无计算能力,无法 GPU 加速

支持任意维度数据,可 GPU 加速,支持求导

NumPy 数组

不支持自动求导,GPU 加速需额外转换

内置求导机制,原生支持 GPU,与框架深度集成

总结

张量是深度学习中数据表示、高效计算和自动优化的核心载体。它不仅统一了不同类型数据的格式,还通过与框架的深度集成,实现了 GPU 加速、自动求导等关键功能,让复杂的神经网络训练变得可行且高效。可以说,没有张量,现代深度学习的大规模应用(如图像识别、自然语言处理)几乎无法实现。

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

相关文章:

  • Spring(四) 关于AOP的源码解析与思考
  • 一文理解缓存的本质:分层架构、原理对比与实战精粹
  • 别再怕 JSON!5分钟带你轻松搞懂这个程序员的好帮手
  • 鸿蒙的NDK开发初级入门篇
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (四) 产业应用全景扫描
  • (LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
  • Ntfs!LfsFlushLfcb函数分析之while的循环条件NextLbcb的确定和FirstLbcb->LbcbFlags的几种情况
  • docker-compose方式搭建lnmp环境——筑梦之路
  • 【android bluetooth 协议分析 07】【SDP详解 2】【SDP 初始化】
  • Operation Blackout 2025: Smoke Mirrors
  • Windows符号链接解决vscode和pycharm占用C盘空间太大的问题
  • NX二次开发——导入模型是常遇见的问题(导入模型原点的确定导入模型坐标的确定)
  • BERT:双向Transformer革命 | 重塑自然语言理解的预训练范式
  • 深入理解大语言模型:从核心技术到极简实现
  • 洛谷题解 | UVA1485 Permutation Counting
  • jenkins自动化部署前端vue+docker项目
  • 前端面试宝典---项目难点2-智能问答对话框采用虚拟列表动态渲染可视区域元素(10万+条数据)
  • 自动化运维工具jenkins问题
  • Ubuntu安装Jenkins
  • java堆的创建与基础代码解析(图文)
  • Classifier guidance与Classifier-free guidance的原理和公式推导
  • 深大计算机游戏开发实验三
  • 深度学习图像分类数据集—害虫识别分类
  • 分布式数据库系统模式结构深度解析
  • Nginx 中的负载均衡策略
  • 数据统计及透视表
  • 使用Java完成下面项目
  • 引入了模块但没有使用”,会不会被打包进去
  • 【科研绘图系列】R语言绘制小提琴图
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群游戏定制策略研究