PyTorch 张量基础(一)

发布时间:2026/7/29 1:58:48
PyTorch 张量基础(一) 前言本文梳理 PyTorch 入门核心知识张量全套创建操作。读完本文你将掌握各类张量创建 API、使用场景与代码示例。一、深度学习基础导论1. ML机器学习和 DL深度学习的关系与区别基础定义MLMachine Learning机器学习让机器从数据里学习规律、完成预测任务的一大类方法是一个大集合。DLDeep Learning深度学习属于机器学习的子集依托多层神经网络实现学习。核心区别对比维度传统机器学习深度学习特征处理需要人工手动设计特征特征工程自动从原始数据学习特征无需人工提取数据需求量中小规模数据即可取得不错效果十分依赖大量数据数据越少优势越弱模型结构结构较浅通常只有 1~2 层计算单元多层堆叠的神经网络深度网络硬件要求普通 CPU 就能运行大多需要 GPU 加速训练可解释性大多模型逻辑清晰容易分析预测依据黑盒特性很难解释模型做出判断的内在原因典型算法逻辑回归、SVM、随机森林、K-MeansCNN、RNN、Transformer 等深度网络通俗理解机器学习是教会电脑做题深度学习是教会电脑先看懂题目再自己做题。2. 深度学习的 5 个核心特点多层网络结构由多层神经元堆叠而成深度一词来源于多层网络结构层数越多网络深度越高。自动特征提取不需要人工设计特征模型直接接收原始数据图片像素、文本字符逐层自动提炼底层、高层特征。海量数据驱动模型参数量巨大需要大量样本才能充分训练数据量越大深度学习相比传统机器学习的优势越明显。强大的拟合能力多层非线性变换可以拟合极其复杂的数据分布适合图像、语音、自然语言这类高难度任务。模型可解释性弱深度网络常被称作黑盒模型我们很难清晰解释模型究竟依据哪些信息输出最终结果难以追溯推理过程。3. 深度学习常用基础模型CNN卷积神经网络Convolutional Neural Network擅长处理网格结构数据最典型就是图片依靠卷积操作提取局部空间特征。应用图像分类、目标检测、图像分割。RNN循环神经网络Recurrent Neural Network专门处理时序序列数据拥有记忆能力可以利用上一步的信息辅助当前计算。应用语音识别、时序预测、早期文本处理。拓展RNN 衍生变体 LSTM、GRU当前主流序列模型为 Transformer。4. 深度学习典型 4 类应用场景计算机视觉CV图像识别、人脸识别、自动驾驶视觉感知、图像生成AI 绘画。自然语言处理NLP机器翻译、聊天大模型、文本摘要、情感分析。语音信号处理语音转文字、语音合成、语音降噪、声纹识别。多模态与推荐系统短视频内容推荐、图文跨模态检索、智能机器人感知交互。二、张量的创建本节学习目标掌握基础张量创建方式掌握 0/1、指定值张量创建掌握线性张量、随机张量创建掌握张量数据类型指定与完整类型转换方案2.1 什么是张量PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中张量以类的形式封装张量相关运算、处理方法都内置在类中。张量是 PyTorch 的核心数据抽象一维张量向量二维张量矩阵更高维度张量可以用来存放图片、语音等复杂数据。PyTorch 张量 vs NumPy 数组二者外观相似都是存放同类型元素的多维数组可以互相转换核心区别运行设备NumPy 数组仅支持 CPU张量支持 CPU 与 GPUCUDA 加速自动微分NumPy 不支持求导张量支持梯度记录、自动求导深度学习核心定位场景NumPy 面向通用科学计算张量专门服务深度学习训练2.2 基础张量创建方式torch.tensor根据指定数据创建张量可通过dtype直接指定元素类型torch.Tensor根据形状创建张量也可传入数据创建张量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor老式 API创建固定类型张量代码示例import torch import numpy as np 创建指定类型张量 t1 torch.tensor([1, 2, 3, 4, 5], dtypetorch.float) # torch.float 等价 float32 print(ft1: {t1}, (元素)类型: {t1.dtype}, (张量对象)类型: {type(t1)}) 标量0 维张量 t2 torch.tensor(10) print(ft2: {t2}, type: {type(t2)}) print(- * 30) 二维列表 → 张量 data [[1, 2, 3], [4, 5, 6]] t3 torch.tensor(data) print(ft3: {t3}, type: {type(t3)}) print(- * 30) numpy ndarray → 张量 data np.random.randint(0, 10, size(2, 3)) t4 torch.tensor(data) print(ft4: {t4}, type: {type(t4)}) 错误写法torch.tensor(2,3) 直接传维度会报错 t5 torch.tensor(2, 3)老式类型专用张量 APIimport torch # 传入形状创建未初始化张量 t_int1 torch.IntTensor(2, 3) # int32 t_float1 torch.FloatTensor(2, 3) # float32 t_double1 torch.DoubleTensor(2, 3) # float64 传入数据强制指定类型 t_int2 torch.IntTensor([1, 2, 3]) t_float2 torch.FloatTensor([1.1, 2.2]) t_double2 torch.DoubleTensor([0.1, 0.2]) 现代等价写法 t_int torch.tensor([1, 2, 3], dtypetorch.int32) t_float torch.tensor([1.1, 2.2], dtypetorch.float32) t_double torch.tensor([0.1, 0.2], dtypetorch.float64)区分重点t1.dtype张量内部元素的数据类型type(t1)张量本身 Python 对象类型永远是torch.Tensor2.3 创建 0、1、指定值张量torch.ones和torch.ones_like创建全 1 张量torch.zeros和torch.zeros_like创建全 0 张量torch.full和torch.full_like创建全部为指定值张量不带_like手动传入维度带_like参考已有张量自动复制形状、数据类型、设备。import torch ref torch.tensor([[1, 2], [3, 4]], dtypetorch.float32) 全 1 张量 t_ones torch.ones(2, 3) t_ones_like torch.ones_like(ref) 全 0 张量 t_zeros torch.zeros(2, 3) t_zeros_like torch.zeros_like(ref) 指定值张量 t_full torch.full((2, 3), fill_value5.0) t_full_like torch.full_like(ref, fill_value5.0)2.4 创建线性和随机张量torch.arange()和torch.linspace()创建线性张量torch.random.initial_seed()获取当前全局随机种子torch.random.manual_seed()设置全局随机种子torch.rand() / torch.randn()创建随机浮点类型张量torch.randint(low, high, size())创建随机整数类型张量随机种子两种方法区别torch.random.manual_seed(种子数值)作用设置全局随机种子。种子固定后后续所有随机操作生成结果固定影响当前进程全部随机函数。调用时机代码开头统一设置。torch.random.initial_seed()作用读取当前正在使用的全局种子只能获取不能修改返回整数。用途查看当前种子、复现实验、记录日志。import torch # 线性张量 t_arange torch.arange(0, 10, 2) # [start, end)按步长生成 t_lin torch.linspace(0, 10, 5) # [start, end]均分生成指定个数点 设置全局随机种子固定随机结果 torch.random.manual_seed(666) 获取当前全局种子 current_seed torch.random.initial_seed() print(当前种子, current_seed) 随机浮点张量 rand_t torch.rand(3, 3) # [0,1) 均匀分布 randn_t torch.randn(3, 3) # 标准正态分布 N(0,1) 随机整数张量 randint_t torch.randint(0, 10, (2, 2)) # [low, high) 随机整数2.5 张量数据类型转换方法 1创建张量时直接指定 dtype推荐t torch.tensor([1, 2, 3], dtypetorch.float32)方法 2.to() 通用类型转换通用支持类型设备t_int torch.tensor([1, 2]) t_float t_int.to(dtypetorch.float32) t_long t_int.to(dtypetorch.int64)方法 3专用简写函数简洁仅改类型t torch.tensor([1.1, 2.2]) t_float32 t.float() t_float64 t.double() t_int32 t.int() t_int64 t.long() t_bool t.bool()常用 dtype 对照表常量简写完整常量含义torch.floattorch.float3232 位浮点数训练默认torch.doubletorch.float6464 位双精度浮点数torch.inttorch.int3232 位整数torch.longtorch.int6464 位长整型索引默认torch.booltorch.bool布尔类型 True/False重要提醒所有类型转换都会生成新张量原张量不会被修改。参考资料PyTorch 官方网站PyTorch黑马程序员 PyTorch 深度学习教程