Pytorch使用教学7-张量的广播

在这里插入图片描述

PyTorch中的张量具有和NumPy相同的广播特性,允许不同形状的张量之间进行计算。

广播的实质特性,其实是低维向量映射到高维之后,相同位置再进行相加。我们重点要学会的就是低维向量如何向高维向量进行映射

相同形状的张量计算

虽然我们觉得不同形状之间的张量计算才是广播,但其实相同形状的张量计算本质上也是广播。

t1 = torch.arange(3)
t1
# tensor([0, 1, 2])# 对应位置元素相加
t1 + t1
# tensor([0, 2, 4])

与Python对比

如果两个list相加,结果是什么?

a = [0, 1, 2]
a + a
# [0, 1, 2, 0, 1, 2]

不同形状的张量计算

广播的特性是不同形状的张量进行计算时,一个或多个张量通过隐式转化成相同形状的两个张量,从而完成计算。

但并非任意两个不同形状的张量都能进行广播,因此我们要掌握广播隐式转化的核心依据。

2.1 标量和任意形状的张量

标量(零维张量)可以和任意形状的张量进行计算,计算过程就是标量和张量的每一个元素进行计算。

# 标量与一维向量
t1 = torch.arange(3)
# tensor([0, 1, 2])t1 + 1 # 等效于t1 + torch.tensor(1)
# tensor([1, 2, 3])
# 标量与二维向量
t2 = torch.zeros((3, 4))
t2 + 1 # 等效于t2 + torch.tensor(1)
# tensor([[1., 1., 1., 1.],
#         [1., 1., 1., 1.],
#         [1., 1., 1., 1.]])

2.2 相同维度,不同形状张量之间的计算

我们以t2为例来探讨相同维度、不同形状的张量之间的广播规则。

t2 = torch.zeros(3, 4)
t2
# tensor([[0., 0., 0., 0.],
#         [0., 0., 0., 0.],
#         [0., 0., 0., 0.]])t21 = torch.ones(1, 4)
t21
# tensor([[1., 1., 1., 1.]])

它们都是二维矩阵,t21的形状是1×4t2的形状是3×4,它们在第一个分量上取值不同,但该分量上t21取值为1,因此可以进行广播计算:

t2 + t21
# tensor([[1., 1., 1., 1.],
#        [1., 1., 1., 1.],
#        [1., 1., 1., 1.]])

而t2和t21的实际计算过程如下:

在这里插入图片描述

可理解为t21的一行与t2的三行分别进行了相加。而底层原理为t21的形状由1×4拓展成了t23×4,然后二者对应位置进行了相加。

t22 = torch.ones(3, 1)
t22
# tensor([[1.],
#         [1.],
#         [1.]])t2 + t22
# tensor([[1., 1., 1., 1.],
#         [1., 1., 1., 1.],
#         [1., 1., 1., 1.]])

同理,t22+t2t21+t2结果相同。如果矩阵的两个维度都不相同呢?

t23 = torch.arange(3).reshape(3, 1)
t23
# tensor([[0],
#         [1],
#         [2]])t24 = torch.arange(3).reshape(1, 3)
# tensor([[0, 1, 2]])t23 + t24
# tensor([[0, 1, 2],
#         [1, 2, 3],
#         [2, 3, 4]])

此时,t23的形状是3×1,而t24的形状是1×3,二者的形状在两个份量上均不同,但都有1存在,因此可以广播:

在这里插入图片描述

如果两个张量的维度对应数不同且都不为1,那么就无法广播。

t25 = torch.ones(2, 4)
# t2的shape为3×4
t2 + t25
# RuntimeError

高维张量的广播

高维张量的广播原理与低维张量的广播原理一致:

t3 = torch.zeros(2, 3, 4)
t3
# tensor([[[0., 0., 0., 0.],
#          [0., 0., 0., 0.],
#          [0., 0., 0., 0.]],#         [[0., 0., 0., 0.],
#         [0., 0., 0., 0.],
#         [0., 0., 0., 0.]]])t31 = torch.ones(2, 3, 1)
t31
# tensor([[[1.],
#          [1.],
#          [1.]],#         [[1.],
#          [1.],
#          [1.]]])t3+t31
# tensor([[[1., 1., 1., 1.],
#          [1., 1., 1., 1.],
#          [1., 1., 1., 1.]],#         [[1., 1., 1., 1.],
#          [1., 1., 1., 1.],
#          [1., 1., 1., 1.]]])

总结

维度相同时,如果对应分量不同,但有一个为1,就可以广播。

不同维度计算中的广播

对于不同维度的张量,我们首先可以将低维的张量升维,然后依据相同维度不同形状的张量广播规则进行广播。

低维向量的升维也非常简单,只需将更高维度方向的形状填充为1即可:

# 创建一个二维向量
t2 = torch.arange(4).reshape(2, 2)
t2
# tensor([[0, 1],
#         [2, 3]])# 创建一个三维向量
t3 = torch.zeros(3, 2, 2)
t3t2 + t3
# tensor([[[0., 1.],
#          [2., 3.]],#         [[0., 1.],
#          [2., 3.]],#         [[0., 1.],
#          [2., 3.]]])

t3t2的相加,就相当于1×2×23×2×2的两个张量进行计算,广播规则与低维张量一致。

相信看完本节,你已经充分掌握了广播机制的运算规则:

  • 维度相同时,如果对应分量不同,但有一个为1,就可以广播
  • 维度不同时,只需将低维向量的更高维度方向的形状填充为1即可

Pytorch张量操作大全:

Pytorch使用教学1-Tensor的创建
Pytorch使用教学2-Tensor的维度
Pytorch使用教学3-特殊张量的创建与类型转化
Pytorch使用教学4-张量的索引
Pytorch使用教学5-视图view与reshape的区别
Pytorch使用教学6-张量的分割与合并
Pytorch使用教学7-张量的广播
Pytorch使用教学8-张量的科学运算
Pytorch使用教学9-张量的线性代数运算
Pytorch使用教学10-张量操作方法大总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3266275.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

FreeRTOS操作系统(详细速通篇)——— 第六章

本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅! 目录 系统中断管理 1 什么是中断? 1.1中断定义 1.2 中断执行机制 ​…

Chiplet SPI User Guide 详细解读

目录 一. 基本介绍 1.1.整体结构 1.2. 结构细节与功能描述 二. 输入输出接口 2.1. IO Ports for SPI Leader 2.2. IO Ports for SPI Follower 2.3. SPI Mode Configuration 2.4. Leader IP和Follower IP功能图 三. SPI Programming 3.1. Leader Register Descripti…

算法:数值算法

矩阵乘法 定义与性质 矩阵乘法是线性代数中的一个基本运算,它涉及到两个矩阵的点积运算。给定两个矩阵 A(mn)和 B(np),它们的乘积 C(mp)定义为: 其中, Cij …

大连智点文化传媒有限公司介绍

在辽宁省大连市的文化传媒领域,大连智点文化传媒有限公司(以下简称“智点文化”)以其独特的魅力和专业的服务,逐渐崭露头角。作为一家集广告、文化、营销策划等多功能于一体的综合性文化传媒公司,智点文化不仅拥有深厚的行业底蕴,还不断探索与创新,以适应快速变化的市场需求。 …

在英特尔 Gaudi 2 上加速蛋白质语言模型 ProtST

引言 蛋白质语言模型 (Protein Language Models, PLM) 已成为蛋白质结构与功能预测及设计的有力工具。在 2023 年国际机器学习会议 (ICML) 上,MILA 和英特尔实验室联合发布了ProtST模型,该模型是个可基于文本提示设计蛋白质的多模态模型。此后&#xff0…

AI发展下的伦理挑战:构建未来科技的道德框架

一、引言 随着人工智能(AI)技术的飞速发展,我们正处在一个前所未有的科技变革时代。AI不仅在医疗、教育、金融、交通等领域展现出巨大的应用潜力,也在日常生活中扮演着越来越重要的角色。然而,这一技术的迅猛进步也带来…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中,有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量(结构更清晰,语义更明确,可读性更好)在长字…

《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>

前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

ElasticSearch学习篇15_《检索技术核心20讲》进阶篇之TopK检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243,文档形式记录笔记。 相关问题: ES全文检索是如何进行相关性打分的?ES中计算相关性得分的时机?如何加速TopK检索?三种思路 精准To…

60个常见的 Linux 指令

1.ssh 登录到计算机主机 ssh -p port usernamehostnameusername: 远程计算机上的用户账户名。 hostname: 远程计算机的 IP 地址或主机名。 -p 选项指定端口号。 2.ls 列出目录内容 ls ls -l # 显示详细列表 ls -a # 显示包括隐藏文件在内的所有内…

Linux系统上安装Redis

百度网盘: 通过网盘分享的文件:redis_linux 链接: https://pan.baidu.com/s/1ZcECygWA15pQWCuiVdjCtg?pwd8888 提取码: 8888 1.把安装包拖拽到/ruanjian/redis/文件夹中(自己选择) 2.进入压缩包所在文件夹,解压压缩…

tarojs项目启动篇

TaroJS 是一个开放式跨端开发解决方案,使用 React 语法规范来开发多端应用(包括小程序、H5、React Native 等)。它可以帮助开发者高效地构建出在不同端上运行一致的应用。以下是启动 TaroJS 项目(本来就有的旧项目)的步…

前后端分离的开发模式+YAPI接口文档

博客主页:音符犹如代码系列专栏:JavaWeb关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 早期的开发模式:前后端混合开发 在这种模式下开发下,…

WAF+API安全代表厂商|瑞数信息入选IDC报告《生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势》

近日,全球领先的权威资讯机构IDC正式发布《IDC Market Presentation:生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势,2024》报告。报告中IDC 评估了众多厂商的安全硬件产品能力,并给出了产品对应的推荐厂商供最终用户参…

浏览器渲染机制和node事件循环

浏览器渲染机制 Document Object Model (DOM) 当浏览器读取 HTML 代码时,只要遇到 body、div 等 HTML 元素,就会创建一个名为 Node 的 JavaScript 对象。 浏览器从 HTML 文档中创建了 Node 之后,就要把这些节点对象创建成树状结构。 CSS Obje…

如何从2D到3D动画(计算机图形学基础)

引言 计算机图形学是一门将数学、计算机科学和艺术结合起来的学科,它在现代技术中扮演着越来越重要的角色。从游戏设计到虚拟现实(VR)、增强现实(AR)和元宇宙,计算机图形学的应用无处不在。它不仅为人们提…

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示,点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径,点击箭头所指浏览按钮,会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…

基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】

有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 在本研究中,我们采用Python编程语言,利用爬虫技术实时获取豆瓣电影最新数据。通过分析豆瓣网站的结构,我们设计了一套有效的策略来爬取电影相关的JSON格式数据。…

JavaScript——变量与运算符、输入输出、判断、循环

文章目录 前言概述使用 js从文件引入 js 代码importjs 的作用变量计算输入格式化输出保留小数向上取整,向下取整条件判断循环总结 前言 为了监督自己的进度,把学习任务一点点都写出来,写多少就算多少,不求完美,只求完…

# JVM 参数大全

JVM 参数大全 文章目录 JVM 参数大全内存参数垃圾收集器配置GC日志配置dump 日志参数配置发生Full GC时生成dump文件在IDEA中配置JVM参数 内存参数 -Xmx3550m:设置JVM最大堆内存为3550M -Xms3550m:设置JVM初始堆内存 为3550M。此值可以设置与-Xmx相同&am…