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

【PyTorch】0.初识:从吃货角度理解张量

0.初识张量

PyTorch 是一个 Python 深度学习框架,它将数据封装成张量(Tensor)来进行运算。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中,张量以 "类" 的形式封装起来,对张量的一些运算、处理的方法被封装在类中。

我们如何理解上面这段话呢?

举一个例子:

假如我们要做一个超级厉害的美食推荐系统(正如当下各种强大的推荐算法,比如抖音短视频根据用户的喜好和痛点来推荐),首先我们得把各种各样跟美食相关的信息告诉这个系统,让它能明白每一道菜的特点,然后才能给你推荐合适的美食。

这时候呢,数据就好比是我们要处理的各种食材。比如,我们有一道宫保鸡丁,它有很多属性,像食材的种类(鸡肉、花生、辣椒等)、食材的用量(鸡肉 100 克、花生 50 克等)、口味特点(甜辣、咸香等),这些信息就是我们的数据。

那张量是什么呢?张量就像是一个特别规整的盒子,我们把这些数据都按照一定的规则放到这个盒子里。比如,我们可以把宫保鸡丁的食材种类用一个列表表示,食材用量用另一个列表表示,口味特点也用一个列表表示,然后把这些列表都放到一个大的张量盒子里。这样,张量就把这些不同维度的数据都整合到一起啦,就像下面这样:

import torch# 假设食材种类用数字编码,鸡肉=1,花生=2,辣椒=3
ingredient_types = [1, 2, 3]  
# 食材用量
ingredient_amounts = [100, 50, 30]  
# 口味特点,甜辣=1,咸香=0
taste_features = [1, 0]  # 把这些数据组合成一个张量
gongbao_jiding_tensor = torch.tensor([ingredient_types, ingredient_amounts, taste_features])
print(gongbao_jiding_tensor)

这里的gongbao_jiding_tensor就是一个张量,它是一个二维的张量,就像一个有两行三列的表格。它把宫保鸡丁的各种数据都整齐地装在了一起,方便我们的美食推荐系统来处理。

如果我们还有其他的菜,比如麻婆豆腐、回锅肉等等,我们就可以把它们的数据也都放到一个更大的张量里,就好像把很多个装着不同菜数据的小盒子,再放到一个更大的盒子里,这个大盒子也是一个张量,不过它可能就是三维的啦,因为它要装下很多道菜的数据。

# 假设麻婆豆腐的数据
mapo_tofu_ingredient_types = [4, 5, 6]  
mapo_tofu_ingredient_amounts = [200, 30, 20]  
mapo_tofu_taste_features = [1, 1]  # 把宫保鸡丁和麻婆豆腐的数据组合成一个更大的张量
all_dishes_tensor = torch.tensor([[ingredient_types, ingredient_amounts, taste_features],[mapo_tofu_ingredient_types, mapo_tofu_ingredient_amounts, mapo_tofu_taste_features]
])
print(all_dishes_tensor)

这样,我们的美食推荐系统就可以很方便地对这些数据进行处理,它可以根据这些张量里的数据,分析不同菜之间的相似性,比如哪些菜都是辣的,哪些菜都用了某种食材,然后根据你的喜好给你推荐合适的美食。

在深度学习里也是一样的道理,我们要处理的图像、语音、文本等各种数据,都可以像这些菜的信息一样,被封装成张量。这样,深度学习模型就可以很方便地对这些数据进行各种运算和处理,就像我们的美食推荐系统处理菜的数据一样,去发现数据里的规律,做出准确的判断和预测。

而且,把张量以 “类” 的形式封装起来,就好像是把这些处理数据的方法和数据都放在了一个有特定功能的小房子里。在这个小房子里,有专门的方法来对张量进行加、减、乘、除等运算,还有方法来改变张量的形状、提取张量里的某些信息等等。我们只需要告诉这个小房子我们要做什么,它就会帮我们完成相应的操作,这样就大大方便了我们对数据的处理和使用啦。

0.1如何理解维度?

0.1.1从吃的角度

假设我们有这样一个二维张量:

import torch# 假设我们有一个二维张量,存储了三道菜的信息
tensor = torch.tensor([[1, 2, 3],  # 第一道菜的信息[4, 5, 6],  # 第二道菜的信息[7, 8, 9]   # 第三道菜的信息
])

在这个例子中,第一个维度(也就是行)可以代表不同的菜哦。比如说,第一行 [1, 2, 3] 代表宫保鸡丁,第二行 [4, 5, 6] 代表麻婆豆腐,第三行 [7, 8, 9] 代表回锅肉。

而第二个维度(也就是列),我们可以赋予它不同的含义,比如我们可以规定:第一列表示这道菜的价格,第二列表示这道菜的热量,第三列表示这道菜的受欢迎程度。

那么,对于 tensor[0][1] 这个元素,它就表示宫保鸡丁的热量,因为 tensor[0] 表示宫保鸡丁的数据,而 tensor[0][1] 表示宫保鸡丁数据中的第二列,也就是我们规定的热量信息。

0.1.2从数学角度

张量可以看作是扩展了标量(0维)、向量(1维)和矩阵(2维)的高维数组。根据维度的不同,我们可以将张量分为不同的种类。

1. 二维张量(矩阵)

二维张量是一个表格,可以想象成一个具有行和列的数组。它实际上就是一个矩阵,每个元素都有两个索引:行索引和列索引。

例子:二维矩阵

想象一下一个简单的二维矩阵(张量):

A = [    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

这个矩阵的维度是 3×33 \times 33×3,也就是有3行和3列。每个元素 A[i][j]A[i][j]A[i][j] 都可以通过两个下标 iii(行)和 jjj(列)来访问。例如,元素 A[0][1]A[0][1]A[0][1] 就是2,表示在第一行第二列的元素。

我们可以把二维张量看作是一个 表格 或 棋盘,其中每个格子(元素)都有一个特定的位置。

2. 三维张量(盒子)

三维张量是一个更复杂的结构,实际上可以看作是一系列矩阵的集合。它的每个元素都需要三个索引:一个表示“层”(depth),一个表示行索引,另一个表示列索引。三维张量可以想象成一个 立体的表格

例子:三维张量

假设我们有一个三维张量(我们可以称之为“盒子”):


B = [    [        [1, 2],
        [3, 4]
    ],
    [        [5, 6],
        [7, 8]
    ],
    [        [9, 10],
        [11, 12]
    ]
]

这个三维张量的形状是3x2x2 , 包含了三个矩阵(层),每个矩阵是2x2的大小。

可以把这个三维张量看作是一个 立方体盒子,每一层都是一个矩阵。

第一层是什么?是[[1,2] , [3,4]]

一次类推

每个元素可以通过三个索引来访问,比如 B[2][1][0代表第三层、第二行、第一列的元素(即11)。

1.总结

  • 1.1张量概念

    • 1.1.1PyTorch 是深度学习框架,使用张量封装数据运算,张量是同数据类型的多维矩阵,以类封装,包含多种处理方法。
    • 1.1.2如美食推荐系统中,宫保鸡丁的食材种类、用量和口味等信息可封装成二维张量,多道菜信息可组成三维张量,方便系统处理。
    • 1.1.3张量类便于进行数据运算和操作。
  • 1.2维度理解

    • 1.2.1从吃的角度:二维张量存储多道菜信息,行代表菜,列可表示价格、热量等。
    • 1.2.2从数学角度:二维张量是矩阵,三维张量是多个矩阵集合,可看作立体结构,元素通过多个索引访问。

欢迎各位大佬关注和三连!!!

相关文章:

【PyTorch】0.初识:从吃货角度理解张量

0.初识张量 PyTorch 是一个 Python 深度学习框架,它将数据封装成张量(Tensor)来进行运算。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中,张量以 "类" 的形式封装起来,对张量的一些运…...

医学图像分析工具09.1:Brainstorm安装教程

1. 安装前准备 **官方安装包和数据:**https://neuroimage.usc.edu/bst/download.php **官方安装教程:**https://neuroimage.usc.edu/brainstorm/Installation Matlab 版本要求: 有 Matlab: R2009b (7.9) 或更高版本没有 Matlab&…...

springboot基于Spring Boot的智慧养老服务系统的设计与实现

系统介绍: 智慧养老服务系统是一种运用现代科技手段,整合各类养老资源,为老年人提供全方位、个性化服务的综合性平台。该系统通过智能化设备、大数据分析、云计算等技术,实现对老年人健康状况、生活需求的实时监控与精准匹配&…...

Linux内核中IPoIB驱动模块的初始化与实现

InfiniBand(IB)是一种高性能的网络互连技术,广泛应用于高性能计算(HPC)和数据中心。为了在InfiniBand网络上运行标准的IP协议栈,Linux内核提供了IP over InfiniBand(IPoIB)驱动模块。IPoIB允许在InfiniBand网络上传输IPv4和IPv6数据包,从而使得现有的IP应用程序能够无…...

WPS计算机二级•幻灯片的基础操作

听说这是目录哦 PPT的正确制作步骤🛣️认识PPT界面布局🏜️PPT基础操作 快捷键🏞️制作PPT时 常用的快捷技巧🏙️快速替换PPT的 文本字体🌃快速替换PPT 指定文本内容🌅能量站😚 PPT的正确制作步…...

.NET9增强OpenAPI规范,不再内置swagger

ASP.NETCore in .NET 9.0 OpenAPI官方文档ASP.NET Core API 应用中的 OpenAPI 支持概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/overview?viewaspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/ope…...

基于微信小程序的民宿预订管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

网络(三) 协议

目录 1. IP协议; 2. 以太网协议; 3. DNS协议, ICMP协议, NAT技术. 1. IP协议: 1.1 介绍: 网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议. 路径选择: 确…...

【深度解析Java 20天速成】04_IDEA的安装与使用

【Why IDEA ?】 【注】JetBrains官方说明: 尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向 JetBrains 产品的用户,因为这些用户更有可能参加调查。 此外,2022年,某美国软件开发商在对近千名专业的Ja…...

gitlab处理空文件夹的提交或空文件夹提交失败

问题描述 厂家发给了我一个压缩包文件,压缩包解压之后本地编译没问题;推送到gitlab之后,再编译就报错了; 问题原因 经过分析之后发现,压缩包解压之后存在很多空文件夹;但是gitlab推送的时候,…...

计算机网络之链路层

本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 02 数据链路层 在网上看到其他人做了详细的笔记,就不再多余写了,直接参考着学习吧。 1 详解数据链路层-数据链路层的功能【王道计算机网络笔记】_wx63088f6683f8f的技术博客_51C…...

Arduino大师练成手册 -- 读取红外接收数据

硬件连接 连接引脚: 将红外接收器的 VCC 引脚连接到 Arduino 的 5V 引脚。 将红外接收器的 GND 引脚连接到 Arduino 的 GND 引脚。 将红外接收器的 OUT 引脚连接到 Arduino 的数字引脚(例如 D11)。 安装必要的库 在 Arduino IDE 中&#…...

【Efficient AIGC】SiTo: Similarity-based Token Pruning (AAAI-2025)

文章目录 SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Pruning背景介绍方法结果消融 文章目录 SiTo: Training-Free and Hardware-Friendly Acceleration for Diffusion Models via Similarity-based Token Prun…...

数据标注开源框架 Label Studio

数据标注开源框架 Label Studio Label Studio 是一个开源的、灵活的数据标注平台,旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据(如文本、图像、音频、视频等)以及复杂的标注任务(如分类、命名实体…...

MyBatis最佳实践:MyBatis 框架的缓存

缓存的概念: 在内存中临时存储数据,速度快,可以减少数据库的访问次数经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中 缓存的级别: 一级缓存(默认开启):SqlSession 级别 …...

基于LangGraph、Groq和Tavily打造可以调用外部搜索引擎工具的对话机器人(核心代码 万字详解)

一、python环境 & 相关库版本信息 代码运行在 conda 创建的python环境下,python和相关库的版本信息如下: $ python --version Python 3.12.3$ pip list | grep langchain langchain 0.3.15 langchain-community 0.3.15 lang…...

衡量算法性能的量级标准:算法复杂度

今天开始数据结构的学习!作为一大重点,拿出态度很重要,想要真实掌握,博客笔记自然少不了!重点全部上色!避免疏忽 下面我们从0基础开始学习今天的第一节!不用担心看不懂,拒绝枯燥的理…...

PHP校园助手系统小程序

🔑 校园助手系统 —— 智慧校园生活 📱一款基于ThinkPHPUniapp框架深度定制的校园助手系统,犹如一把智慧之钥,专为校园团队精心打造,解锁智慧校园生活的无限精彩。它独家适配微信小程序,无需繁琐的下载与安…...

如何在Spring Boot项目中高效集成Spring Security

1 Spring Security 介绍 Spring Security 是一个功能强大且高度可定制的安全框架,专为保护基于Java的应用程序而设计。它不仅提供了认证(Authentication)和授权(Authorization)的功能,还支持防止各种常见的安全攻击模式。本文将详细介绍Spring Security的主要特点、功能…...

【PostgreSQL内核学习 —— (WindowAgg(一))】

WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...