当前位置: 首页 > news >正文

PyTorch 张量基础(一)

前言

本文梳理 PyTorch 入门核心知识:张量全套创建操作。读完本文你将掌握各类张量创建 API、使用场景与代码示例。

一、深度学习基础导论

1. ML(机器学习)和 DL(深度学习)的关系与区别

基础定义

  • ML(Machine Learning,机器学习):让机器从数据里学习规律、完成预测任务的一大类方法,是一个大集合
  • DL(Deep Learning,深度学习)属于机器学习的子集,依托多层神经网络实现学习。

核心区别

对比维度传统机器学习深度学习
特征处理需要人工手动设计特征(特征工程)自动从原始数据学习特征,无需人工提取
数据需求量中小规模数据即可取得不错效果十分依赖大量数据,数据越少优势越弱
模型结构结构较浅,通常只有 1~2 层计算单元多层堆叠的神经网络(深度网络)
硬件要求普通 CPU 就能运行大多需要 GPU 加速训练
可解释性大多模型逻辑清晰,容易分析预测依据黑盒特性,很难解释模型做出判断的内在原因
典型算法逻辑回归、SVM、随机森林、K-MeansCNN、RNN、Transformer 等深度网络

通俗理解:机器学习是"教会电脑做题";深度学习是"教会电脑先看懂题目,再自己做题"。

2. 深度学习的 5 个核心特点

  1. 多层网络结构:由多层神经元堆叠而成,"深度"一词来源于多层网络结构;层数越多,网络深度越高。
  2. 自动特征提取:不需要人工设计特征,模型直接接收原始数据(图片像素、文本字符),逐层自动提炼底层、高层特征。
  3. 海量数据驱动:模型参数量巨大,需要大量样本才能充分训练;数据量越大,深度学习相比传统机器学习的优势越明显。
  4. 强大的拟合能力:多层非线性变换可以拟合极其复杂的数据分布,适合图像、语音、自然语言这类高难度任务。
  5. 模型可解释性弱:深度网络常被称作"黑盒模型",我们很难清晰解释模型究竟依据哪些信息输出最终结果,难以追溯推理过程。

3. 深度学习常用基础模型

  • CNN(卷积神经网络,Convolutional Neural Network)
    擅长处理网格结构数据,最典型就是图片;依靠卷积操作提取局部空间特征。
    应用:图像分类、目标检测、图像分割。
  • RNN(循环神经网络,Recurrent Neural Network)
    专门处理时序序列数据,拥有记忆能力,可以利用上一步的信息辅助当前计算。
    应用:语音识别、时序预测、早期文本处理。
拓展:RNN 衍生变体 LSTM、GRU;当前主流序列模型为 Transformer。

4. 深度学习典型 4 类应用场景

  1. 计算机视觉(CV)
    图像识别、人脸识别、自动驾驶视觉感知、图像生成(AI 绘画)。
  2. 自然语言处理(NLP)
    机器翻译、聊天大模型、文本摘要、情感分析。
  3. 语音信号处理
    语音转文字、语音合成、语音降噪、声纹识别。
  4. 多模态与推荐系统
    短视频内容推荐、图文跨模态检索、智能机器人感知交互。

二、张量的创建

本节学习目标

  1. 掌握基础张量创建方式
  2. 掌握 0/1、指定值张量创建
  3. 掌握线性张量、随机张量创建
  4. 掌握张量数据类型指定与完整类型转换方案

2.1 什么是张量

PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中,张量以的形式封装,张量相关运算、处理方法都内置在类中。

张量是 PyTorch 的核心数据抽象:

  • 一维张量:向量
  • 二维张量:矩阵
  • 更高维度张量可以用来存放图片、语音等复杂数据。

PyTorch 张量 vs NumPy 数组

二者外观相似,都是存放同类型元素的多维数组,可以互相转换,核心区别:

  • 运行设备:NumPy 数组仅支持 CPU;张量支持 CPU 与 GPU(CUDA 加速)
  • 自动微分:NumPy 不支持求导;张量支持梯度记录、自动求导(深度学习核心)
  • 定位场景:NumPy 面向通用科学计算;张量专门服务深度学习训练

2.2 基础张量创建方式

  1. torch.tensor:根据指定数据创建张量,可通过dtype直接指定元素类型
  2. torch.Tensor:根据形状创建张量,也可传入数据创建张量
  3. torch.IntTensortorch.FloatTensortorch.DoubleTensor:老式 API,创建固定类型张量

代码示例

import torch import numpy as np 创建指定类型张量 t1 = torch.tensor([1, 2, 3, 4, 5], dtype=torch.float) # torch.float 等价 float32 print(f't1: {t1}, (元素)类型: {t1.dtype}, (张量对象)类型: {type(t1)}') 标量(0 维张量) t2 = torch.tensor(10) print(f't2: {t2}, type: {type(t2)}') print('-' * 30) 二维列表 → 张量 data = [[1, 2, 3], [4, 5, 6]] t3 = torch.tensor(data) print(f't3: {t3}, type: {type(t3)}') print('-' * 30) numpy ndarray → 张量 data = np.random.randint(0, 10, size=(2, 3)) t4 = torch.tensor(data) print(f't4: {t4}, type: {type(t4)}') 错误写法:torch.tensor(2,3) 直接传维度会报错 t5 = torch.tensor(2, 3)

老式类型专用张量 API

import 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], dtype=torch.int32) t_float = torch.tensor([1.1, 2.2], dtype=torch.float32) t_double = torch.tensor([0.1, 0.2], dtype=torch.float64)
区分重点:
  • t1.dtype:张量内部元素的数据类型
  • type(t1):张量本身 Python 对象类型,永远是torch.Tensor

2.3 创建 0、1、指定值张量

  • torch.onestorch.ones_like:创建全 1 张量
  • torch.zerostorch.zeros_like:创建全 0 张量
  • torch.fulltorch.full_like:创建全部为指定值张量

不带_like:手动传入维度;带_like:参考已有张量,自动复制形状、数据类型、设备。

import torch ref = torch.tensor([[1, 2], [3, 4]], dtype=torch.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_value=5.0) t_full_like = torch.full_like(ref, fill_value=5.0)

2.4 创建线性和随机张量

  • torch.arange()torch.linspace():创建线性张量
  • torch.random.initial_seed():获取当前全局随机种子
  • torch.random.manual_seed():设置全局随机种子
  • torch.rand() / torch.randn():创建随机浮点类型张量
  • torch.randint(low, high, size=()):创建随机整数类型张量

随机种子两种方法区别

  1. torch.random.manual_seed(种子数值)
    作用:设置全局随机种子。种子固定后,后续所有随机操作生成结果固定;影响当前进程全部随机函数。
    调用时机:代码开头统一设置。
  2. 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], dtype=torch.float32)

方法 2:.to() 通用类型转换(通用,支持类型+设备)

t_int = torch.tensor([1, 2]) t_float = t_int.to(dtype=torch.float32) t_long = t_int.to(dtype=torch.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
重要提醒:所有类型转换都会生成新张量,原张量不会被修改。

参考资料

  1. PyTorch 官方网站:PyTorch
  2. 黑马程序员 PyTorch 深度学习教程
http://www.jsqmd.com/news/1284285/

相关文章:

  • 微电网两阶段鲁棒优化调度与Matlab实现
  • 高效智能英雄联盟工具深度解析:League Akari完整实战指南
  • 网络上今年刚刚出现的新事物
  • (2026最新)芜湖本地人必选的靠谱漏水检测维修推荐:正规防水补漏防水-卫生间/厨房/屋顶/阳台/外墙渗漏水精准测漏,本地人的信赖之选 - 安佳防水
  • 会计专业学生找工作,怎么提升简历竞争力?
  • MiniSpring框架学习笔记-Pointcut:如何批量匹配代理方法?
  • SmartStor如何备份和恢复操作系统文件
  • 区块链服务商排名调整,场景深度绑定成关键变量
  • AI 写歌 App 推荐:2026中文商用写歌工具横向对比
  • (2026最新)苏州本地人必选的靠谱漏水检测维修推荐:正规防水补漏防水-卫生间/厨房/屋顶/阳台/外墙渗漏水精准测漏,本地人的信赖之选 - 安佳防水
  • Python作业实战:函数封装与文件操作技巧
  • 【泄底】Spring Has Come - 梓崎优
  • DIY焊接健身一体架:硬件工程师的硬核桌面改造方案
  • 一文吃透 GB/T 4208-2017 IP 防护标准|代码释义、测试流程、国标与 IEC 差异、工程避坑指南
  • SLO2016与PIC18F97J60在工业物联网中的组合应用
  • C++组合关系:从类包含到现代软件设计实践
  • Postman实战:从零构建GraphQL API测试全流程指南
  • InnoDB 行级锁与意向锁
  • LTE Cat 1bis与PIC18微控制器在美洲物联网中的应用
  • 3D打印与激光切割融合制造:从设计到实战的混合制造指南
  • (2026最新)自贡本地人必选的靠谱漏水检测维修推荐:正规防水补漏防水-卫生间/厨房/屋顶/阳台/外墙渗漏水精准测漏,本地人的信赖之选 - 安佳防水
  • (2026最新)芜湖本地漏水检测维修公司靠谱推荐:正规防水补漏上门维修-墙面/屋顶/外墙/暗管漏水检测精准定位 - 即刻修防水
  • Python基础语法入门:从环境配置到核心要素
  • LeetCode 207. 课程表
  • 常熟打井找哪家?2026年最新攻略:苏州市瑞溪泉水利工程有限公司凭实力说话 - 瑞溪泉水利
  • Zotero插件市场:一站式插件管理与安装体验的终极指南
  • 凡科杰建云的小程序、商城、门店和建站数据互通吗?
  • 基于行空板与RC车打造可编程智能小车:从硬件连接到Web遥控
  • AIGC检测技术:守护学术原创性的AI解决方案
  • 2026年多功能万年历应用推荐:黄历道历佛历、亲友提醒和个人历怎么选?附天乙日历App完整测评