🎯 学习目标

  • 理解Tensor的概念及其与NumPy数组的区别
  • 掌握Tensor的创建方式和基本属性
  • 熟练使用Tensor的各种操作方法
  • 了解Tensor在GPU上的加速计算
PyTorch Tensor概念图

什么是Tensor

Tensor(张量)是PyTorch中最核心的数据结构,可以理解为多维数组的泛化形式。 它是神经网络中数据传递和计算的基本单元,支持GPU加速计算,是实现深度学习算法的基础。

📊 Tensor的维度层次

0️⃣

标量 Scalar

0维张量,单个数值

torch.tensor(5)
1️⃣

向量 Vector

1维张量,一维数组

torch.tensor([1,2,3])
2️⃣

矩阵 Matrix

2维张量,二维数组

torch.randn(3,4)
📐

高维 Tensor

3维及以上张量

torch.randn(2,3,4)

💻 Tensor创建方式

# 1. 直接创建 import torch # 从列表创建 x = torch.tensor([1, 2, 3]) print(x) # tensor([1, 2, 3]) # 2. 创建特定形状的张量 zeros = torch.zeros(3, 4) # 全0张量 ones = torch.ones(2, 3) # 全1张量 rand = torch.rand(2, 3) # 均匀分布随机 randn = torch.randn(2, 3) # 标准正态分布 # 3. 从NumPy数组创建 import numpy as np arr = np.array([1, 2, 3]) tensor = torch.from_numpy(arr) # 4. 创建单位矩阵 eye = torch.eye(3) # 3x3单位矩阵 # 5. 创建未初始化张量 empty = torch.empty(2, 3) # 未初始化

📝 Tensor基本属性

x = torch.randn(2, 3, 4) # 查看形状 x.shape # torch.Size([2, 3, 4]) x.size() # torch.Size([2, 3, 4]) # 查看维度数 x.dim() # 3 # 查看数据类型 x.dtype # torch.float32 # 查看元素个数 x.numel() # 24 # 查看设备 x.device # cpu 或 cuda:0

⚖️ Tensor vs NumPy数组

特性 PyTorch Tensor NumPy ndarray
GPU支持 原生支持CUDA加速 不支持(需借助CuPy等)
自动求导 支持autograd自动微分 不支持
数据类型 torch.float32, torch.int64等 numpy.float32, numpy.int64等
内存共享 可与NumPy数组共享内存 可与Tensor共享内存
主要用途 深度学习计算 科学计算、数据分析

🔧 Tensor常用操作

索引与切片

x = torch.arange(12).reshape(3,4) # 基本索引 x[0, :] # 第一行 x[:, 0] # 第一列 x[0, 1:3] # 切片 # 高级索引 x[x > 5] # 条件索引 torch.where(x > 5, x, 0)

形状变换

x = torch.randn(2, 3, 4) # reshape/view y = x.reshape(6, 4) z = x.view(-1) # 展平 # 维度置换 t = x.transpose(0, 1) p = x.permute(2, 0, 1) # 增减维度 s = x.squeeze() # 去除尺寸为1的维度 u = x.unsqueeze(0) # 增加维度

GPU加速计算

# 检查CUDA是否可用 print(torch.cuda.is_available()) # True/False # 将Tensor移动到GPU x = torch.randn(1000, 1000) x_gpu = x.cuda() # 方式1 x_gpu = x.to('cuda') # 方式2 x_gpu = x.to('cuda:0') # 指定GPU # 将Tensor移回CPU x_cpu = x_gpu.cpu() x_cpu = x_gpu.to('cpu') # 创建时直接指定设备 x = torch.randn(2, 3, device='cuda')
💡
性能提示

GPU与CPU之间的数据传输开销较大,应尽量减少数据在设备间的移动次数。建议在GPU上完成所有计算后,再将结果移回CPU。

数据计算概念图
图:Tensor是深度学习计算的核心数据结构

📝 本节小结

  • • Tensor是PyTorch的核心数据结构,支持多维数组操作
  • • 可通过多种方式创建Tensor:直接创建、特殊值、随机值、NumPy转换
  • • Tensor支持丰富的索引、切片、形状变换操作
  • • GPU加速是PyTorch的重要优势,使用.cuda()或.to('cuda')进行设备转移
  • • Tensor与NumPy数组可以共享内存,相互转换效率高