PyTorch 深度学习笔记(三)PyTorch 张量基础——从零开始掌握 Tensor

📅 发布时间:2026/8/1 8:44:27
PyTorch 深度学习笔记(三)PyTorch 张量基础——从零开始掌握 Tensor
系列导读本系列共 6 篇从 PyTorch 框架入门到实战案例带你系统掌握深度学习开发。上一篇PyTorch 优势全解析——为什么科研和工业都爱它一、什么是张量Tensor1.1 张量是 PyTorch 的核心张量是 PyTorch 中最核心的数据抽象可以理解为元素为同一种数据类型的多维矩阵与 NumPy 数组类似但支持 GPU 加速和自动微分以类的形式封装内置丰富的运算和方法1.2 张量的维度阶张量的维度数量称为阶Rank或维数通过ndim属性查看阶数名称示例形状0标量Scalartorch.tensor(5)[]1向量Vectortorch.tensor([1, 2, 3])[3]2矩阵Matrixtorch.tensor([[1,2],[3,4]])[2, 2]3三维张量一张彩色图片[C, H, W][3, 224, 224]4四维张量一个批次图片[B, C, H, W][64, 3, 224, 224]importtorch# 0 阶张量标量x0torch.tensor(2)print(fx0:{x0}, 阶数:{x0.ndim}, 形状:{x0.size()})# 输出x0: 2, 阶数: 0, 形状: torch.Size([])# 1 阶张量向量x1torch.tensor([1,2,3])print(f阶数:{x1.ndim}, 形状:{x1.shape})# 输出阶数: 1, 形状: torch.Size([3])# 2 阶张量矩阵x2torch.tensor([[2,3,4],[5,6,7]])print(f阶数:{x2.ndim}, 形状:{x2.size()})# 输出阶数: 2, 形状: torch.Size([2, 3])1.3 张量的关键属性属性说明示例shape/size()张量形状torch.Size([2, 3])ndim/dim()维度数量2dtype数据类型torch.float32numel()元素总数6device存储设备cpu/cuda:0二、张量的创建方式2.1 从数据创建# 根据指定数据创建张量datatorch.tensor([1,2,3])print(data)# 指定数据类型datatorch.tensor([1,2,3],dtypetorch.float32)print(data.dtype)# torch.float322.2 根据形状创建随机初始化# 创建 2 行 3 列的浮点张量默认 float32datatorch.Tensor(2,3)print(data)# 注意Tensor 大写用于创建空张量# tensor 小写用于从数据创建2.3 创建指定类型的张量# 各类张量创建方式datatorch.IntTensor([2,3])# int32datatorch.LongTensor([2,3])# int64datatorch.FloatTensor([2.5,3])# float32默认datatorch.DoubleTensor([2,3])# float64# 不显示的类型FloatTensor→float32LongTensor→int642.4 线性张量# 固定步长生成 [start, end, step)左闭右开datatorch.arange(0,10,2)print(data)# tensor([0, 2, 4, 6, 8])# 固定元素数生成 [start, end]左闭右闭的等差数列datatorch.linspace(0,9,10)print(data)# tensor([0., 1., 2., ..., 9.])2.5 随机张量 ⭐⭐⭐# 标准正态分布随机数datatorch.randn(2,3)print(data)# 随机整数 [low, high)左闭右开datatorch.randint(low0,high10,size(4,6))print(data)# 设置随机种子保证可复现torch.manual_seed(100)datatorch.randn(2,3)print(随机数种子:,torch.initial_seed())2.6 创建全 0 / 全 1 / 全指定值张量# 全 0 张量datatorch.zeros(3,2)# 根据形状创建全 0复制输入张量的形状basetorch.tensor([3,2])datatorch.zeros_like(base)# 全 1 张量datatorch.ones(3,2)datatorch.ones_like(base)# 全指定值datatorch.full((2,2),10)# 全 10datatorch.full_like(base,20)# 根据 base 的形状全 20易错点torch.zeros(3)→ 默认 float32torch.zeros_like(数据)→ 类型跟着输入走三、张量数据类型转换3.1 张量与 NumPy 互转importnumpyasnpimporttorch# 张量 → NumPy共享内存data_tensortorch.tensor([1,3,4])data_numpydata_tensor.numpy()# ⚠️ 共享内存修改一个另一个也变data_numpy[0]100print(data_tensor)# tensor([100, 3, 4])# 使用 copy 避免共享data_numpydata_tensor.numpy().copy()# NumPy → 张量 data_numpynp.array([1,3,4])# 方式 1共享内存data_tensortorch.from_numpy(data_numpy)# 方式 2不共享内存推荐data_tensortorch.tensor(data_numpy)# 或data_tensortorch.from_numpy(data_numpy).clone()3.2 提取标量值# 只有单元素张量才能用 item()xtorch.tensor([2])print(x.item())# 2xtorch.tensor(22)print(x.item())# 22# 多元素张量不能用 item()xtorch.randint(0,4,(3,2))# print(x.item()) # ❌ 报错3.3 类型转换方法datatorch.full((3,2),10)print(data.dtype)# torch.int64# 方式 1type() 方法datadata.type(torch.float64)# 方式 2简洁方法推荐 ⭐⭐⭐datadata.double()# float64datadata.float()# float32datadata.int()# int32datadata.long()# int64datadata.short()# int16四、张量基础总结操作方法说明从数据创建torch.tensor(data)最常用按形状创建torch.Tensor(m, n)随机初始化指定类型创建torch.FloatTensor()等明确数据类型线性序列torch.arange() / linspace()等差数列随机张量torch.randn() / randint()正态/均匀分布全值张量torch.zeros() / ones() / full()0/1/指定值转 NumPy.numpy()共享内存从 NumPy 转torch.from_numpy() / torch.tensor()后者不共享类型转换.float() / .double() / .int()简洁推荐取标量值.item()仅单元素可用五、下一篇预告PyTorch 深度学习笔记四张量运算与变形——数值计算与索引进阶将详细介绍张量的点乘、矩阵乘法、统计函数、索引操作布尔索引、多维索引以及 reshape、transpose、view 等形状变换操作。如果这篇文章对你有帮助欢迎点赞、收藏、关注你的支持是我持续创作的动力。