PyTorch中的Tensor基础操作详解

PyTorch中的Tensor基础操作详解

pytorch-book PyTorch tutorials and fun projects including neural talk, neural style, poem writing, anime generation (《深度学习框架PyTorch:入门与实战》) pytorch-book 项目地址: https://gitcode.com/gh_mirrors/py/pytorch-book

Tensor(张量)是PyTorch中最核心的数据结构,理解Tensor的基本操作是掌握PyTorch的关键。本文将系统介绍Tensor的创建、类型转换、命名张量等基础操作。

什么是Tensor?

Tensor可以简单理解为多维数组,它支持高效的科学计算。Tensor可以是:

  • 0维:标量(单个数字)
  • 1维:向量
  • 2维:矩阵
  • 更高维:高阶数据

Tensor与NumPy的ndarray类似,但额外支持GPU加速计算,这使得PyTorch特别适合深度学习任务。

Tensor的创建方式

PyTorch提供了多种创建Tensor的方法:

1. 直接创建

import torch as t

# 创建指定形状的Tensor(未初始化)
a = t.Tensor(2, 3)  

# 从Python列表创建
b = t.Tensor([[1,2,3],[4,5,6]])

2. 使用工厂函数

PyTorch提供了多种工厂函数来创建特定内容的Tensor:

# 全1张量
t.ones(2, 3)

# 全0张量  
t.zeros(2, 3)

# 单位矩阵
t.eye(3, 3)  

# 随机张量
t.randn(2, 3)  # 标准正态分布
t.rand(2, 3)   # 均匀分布[0,1)

# 序列张量
t.arange(1, 10, 2)  # [1,3,5,7,9]
t.linspace(1, 10, 5) # 1到10均匀分成5份

3. 从NumPy数组创建

import numpy as np
arr = np.ones((2,3))
a = t.tensor(arr)

命名张量

PyTorch支持为张量的维度命名,这在处理图像、序列等数据时特别有用:

# 创建命名张量
imgs = t.randn(1, 2, 2, 3, names=('N', 'C', 'H', 'W'))

# 查看维度名称
print(imgs.names)  # ('N', 'C', 'H', 'W')

# 通过名称操作维度
imgs_rotate = imgs.transpose('H', 'W')

命名张量的优势:

  1. 代码更易读
  2. 减少维度混淆错误
  3. 支持按名称广播

Tensor的类型系统

PyTorch支持多种数据类型,常见的有:

| 数据类型 | dtype | CPU Tensor | GPU Tensor | |---------|-------|------------|------------| | 32位浮点 | torch.float32 | FloatTensor | cuda.FloatTensor | | 64位浮点 | torch.float64 | DoubleTensor | cuda.DoubleTensor | | 16位浮点 | torch.float16 | HalfTensor | cuda.HalfTensor | | 8位整型 | torch.int8 | CharTensor | cuda.CharTensor | | 32位整型 | torch.int32 | IntTensor | cuda.IntTensor | | 64位整型 | torch.int64 | LongTensor | cuda.LongTensor |

类型转换

a = t.rand(2,3)

# 转换为float32
b1 = a.float()  
b2 = a.type(t.FloatTensor)

# 转换为int64
c = a.long()

设备转换

# CPU转GPU
if t.cuda.is_available():
    a_cuda = a.cuda()

# GPU转CPU
a_cpu = a_cuda.cpu()

最佳实践

  1. 优先使用torch.tensor而非torch.Tensor

    • torch.tensor()会根据输入数据自动推断类型
    • torch.Tensor()默认创建FloatTensor
  2. 注意inplace操作

    • _结尾的方法会修改原张量
    • 例如:a.add_(b)会修改a,而a.add(b)会返回新张量
  3. 合理选择数据类型

    • 训练时通常使用float32
    • 推理时可尝试float16减少显存占用
    • 整数索引使用int64或int32

掌握这些Tensor基础操作是使用PyTorch进行深度学习开发的第一步。在实际应用中,合理选择数据类型和创建方式可以显著提升代码效率和可读性。

pytorch-book PyTorch tutorials and fun projects including neural talk, neural style, poem writing, anime generation (《深度学习框架PyTorch:入门与实战》) pytorch-book 项目地址: https://gitcode.com/gh_mirrors/py/pytorch-book

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岑姣盼Estra

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值