PyTorch基础|Tensor张量详解,张量创建、数据类型与常用操作

标签:pytorch、tensor、张量、cuda

前言

在PyTorch中,所有神经网络的输入、权重、梯度,全部都是Tensor(张量) 。

可以简单理解:

  • 0维张量:标量(单个数字)
  • 1维张量:向量(一维数组)
  • 2维张量:矩阵(二维数组)
  • 3维/4维张量:深度学习最常用,比如图像 [N, C, H, W] 批次、通道、高、宽

一、导入包

python 复制代码
import torch

二、张量的创建方式

1. 直接从列表创建

python 复制代码
# 一维
t1 = torch.tensor([1,2,3])
# 二维
t2 = torch.tensor([[1,2],[3,4]])
print(t1)
print(t2)

2. 创建特殊张量

python 复制代码
# 全0
t_zeros = torch.zeros(2,3)
# 全1
t_ones = torch.ones(2,3)
# 随机 [0,1)
t_rand = torch.rand(2,3)
# 标准正态分布(均值0,方差1)
t_randn = torch.randn(2,3)
# 单位矩阵
t_eye = torch.eye(3)

3. 从numpy数组转换

python 复制代码
import numpy as np
arr = np.array([1,2,3])
t = torch.from_numpy(arr)
# 张量转numpy
arr2 = t.numpy()

⚠️ 注意:共享内存,一方修改另一方也会变。

三、张量的属性(重点)

python 复制代码
t = torch.rand(2,3)
print(t.shape)      # 形状,推荐用这个
print(t.size())     # 和shape等价
print(t.dtype)      # 数据类型
print(t.device)     # 所在设备 cpu / cuda:0

常用dtype

类型 说明
torch.float32 / torch.float 浮点,模型训练默认
torch.float64 / torch.double 双精度,很少用
torch.int64 / torch.long 长整型,索引、标签常用
torch.int32 / torch.int 普通int

指定类型创建:

python 复制代码
t = torch.tensor([1,2,3], dtype=torch.float32)

四、CPU / GPU 设备切换

python 复制代码
# 方式1 .to()
t = torch.tensor([1,2,3])
if torch.cuda.is_available():
    t = t.to("cuda")
# 切回cpu
t = t.to("cpu")

# 方式2 .cuda() / .cpu()
if torch.cuda.is_available():
    t = t.cuda()
t = t.cpu()

坑:CPU张量和GPU张量不能直接运算!

五、基础运算

python 复制代码
a = torch.tensor([1,2,3])
b = torch.tensor([4,5,6])

print(a + b)
print(a - b)
print(a * b)   # 逐元素相乘,不是矩阵乘法
print(a / b)

# 矩阵乘法 @ / matmul
m1 = torch.rand(2,3)
m2 = torch.rand(3,4)
res = m1 @ m2
# res = torch.matmul(m1, m2)

六、形状修改 view / reshape

python 复制代码
t = torch.rand(6)
t2 = t.view(2,3)
t3 = t.reshape(3,2)

view要求内存连续;reshape更通用,优先记住reshape。

七、索引和切片(和numpy类似)

python 复制代码
t = torch.rand(3,4)
print(t[0])      # 第0行
print(t[:,0])    # 所有行,第0列
print(t[1:3,:])  # 1~2行,所有列

八、小结

  1. Tensor是PyTorch的基础单元,神经网络所有数据都是张量
  2. 核心属性:shape、dtype、device
  3. 运算默认逐元素 ,矩阵乘法用 @ / matmul
  4. 张量分CPU/GPU,跨设备不能直接计算
相关推荐
路灯上の马陈1 小时前
数据结构-树
数据结构·1024程序员节
前进的李工2 小时前
Agent 学习笔记 02:Harness 与工作流怎么理解
笔记·学习·agent·工作流·harness
weixin_417396832 小时前
星级酒店境外电视频道怎么合法接入?合规要点与核对清单
开发语言·前端·php·1024程序员节·综合布线
地平线开发者2 小时前
QAT 实战:从 PyTorch 模型到 J6E 实板精度与延时验证
pytorch·算法·自动驾驶
m4Rk_2 小时前
【论文阅读】Agent记忆机制(114):MemoryTax——当 Agent 能自主搜索历史,专门的记忆系统还划算吗?
论文阅读·人工智能·学习·开源·github
北方的银狐-Zero3 小时前
OntoL 7.0|面向工业多智能体的语义本体套件,让异构系统真正 “看懂彼此”——OntoL的本体产品矩阵
人工智能·mysql·sqlite·1024程序员节·本体论·本体产品
云和数据.ChenGuang4 小时前
深入剖析 Python 的 MRO 规则:从 C3 线性化到实战踩坑
开发语言·python·1024程序员节
程序员梅雨4 小时前
【从零开始学习数据仓库 | 第一篇】:维度建模理论
大数据·数据仓库·学习·阿里云·数据分析
OxYGC4 小时前
[Web3] 的⛽ Gas 革命:五大协议群组如何终结“Gas 痛点
web3·1024程序员节·layer2·gas·erc-4337