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-张量操作方法大总结

有关Pytorch建模相关的AI干货请扫码关注公众号「AI有温度」阅读获取
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript性能优化与调试

JavaScript性能优化与调试 如何通过优化Javascript代码来提高性能 减少页面的重绘(Repaint)和重排(Reflow) 减少页面的重绘(Repaint)和重排(Reflow)是优化网页性能的重要方面。以…

JAW:一款针对客户端JavaScript的图形化安全分析框架

关于JAW JAW是一款针对客户端JavaScript的图形化安全分析框架,该工具基于esprima解析器和EsTree SpiderMonkey Spec实现其功能,广大研究人员可以使用该工具分析Web应用程序和基于JavaScript的客户端程序的安全性。 工具特性 1、动态可扩展的框架&#x…

模拟ADG主库归档文件丢失,备库出现gap(增量备份解决)

文章目录 一、说明二、环境信息2.1.主备库环境信息2.2.检查主备是否同步正常 三、模拟日志断档3.1.模拟主库归档文件丢失3.2 查看主库状态出现GAP 四、RMAN增量备份恢复备库同步4.1 RMAN增量恢复备库4.2 开启备库redo同步4.3 主备库验证同步 一、说明 模拟Oracle主库归档文件丢…

Git基本原理讲解、常见命令、Git版本回退、Git抛弃本地分支拉取仓库最新分支

借此机会写篇博客汇总一下自己去公司实习之后遇到的一些常见关于Git的操作。 Git基本认识 Git把数据看作是对小型文件系统的一组快照,每次提交更新,或在Git中保存项目状态时,Git主要对当时的全部文件制作一个快照并保存这个快照的索引。同时…

【C++】选择结构案例-三只小猪称体重

案例问题 假设有三只小猪A、B、C,在输入三者体重后希望能输出他们各自的体重并测出谁最重 思路 先让A与B相比较,如果A重,则让A和C相比较,如果A重则输出A最重,否则输出C最重 在最开始的条件(AB相比较&am…

浅谈Devops

1.什么是Devops DevopsDev(Development)Ops(Operation) DevOps(Development和Operations的混合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”…

通过限制访问,实现纯私有Docker镜像

怎么会不过审呢?没有敏感信息呀。 For obvious reasons,Many Docker image repositories are inaccessible,The official warehouse has also been filtered by the firewall,So write about how to build a self use Docker image using CloudFlares Workers and Pages. …

oracle使用backup as copy方式迁移数据文件

oracle使用backup as copy方式迁移数据文件 1 基础环境 --确认数据文件路径 set line 200 col name for a75 select file#,name from v$datafileFILE# NAME ---------- ---------------------------------------------------------------------------1 /u01/app/oracle/orada…

C++20之设计模式(19):空对象

空对象 空对象场景 空对象共享指针不是空对象改进设计隐式空对象总结 空对象 我们并不能总能选择自己想使用的接口。例如,我宁愿让我的车自己开车送我去目的地,而不必把100%的注意力放在道路和开车在我旁边的危险疯子身上。软件也是如此:有时你并不是真…

WPF MVVM使用遇见问题

一、遇见问题 1.使用Dictionary绑定ListBox的ItsSource问题 过程: 需要再界面动态显示字典,在循环中添加两条数据时,绑定的字典断点查看有两条,界面上只显示一条,后面再其他数量的都动态不显示,鼠标滚动后…

BUUCTF [安洵杯 2019]easy_serialize_php

这道题题目说easy但是对我来说极其不友好!看了很多wp讲的模棱两可,我尽量来说清楚点 代码解析: 这里$function $_GET[f],是我们通过get方式传递的,因为注释提示有东西先传fphpinfo看看 找到了一个东西,很…

每日任务:HTTP状态码详解及强缓存与协商缓存的区别

1.HTTP中常见的状态码有哪些? HTTP常见的状态码主要有以下几大类: 1XX:提示信息,协议处理的中间状态 2XX:请求成功 3XX:请求重定向 4XX:请求错误,一般是指发送请求的机器出现了问题 5XX:服务器错误,一般是指接受…

SQL性能优化:提升数据查询效率的秘诀

随着数据库规模的日益增大,SQL查询的性能问题逐渐成为开发者关注的焦点。一个低效的查询可能会导致系统响应缓慢,甚至崩溃。因此,掌握SQL性能优化的技巧对于提升系统整体性能至关重要。本文将介绍几种常用的SQL性能优化方法,帮助你…

IPD推行成功的核心要素(十五)项目管理提升IPD相关项目交付效率和用户体验

研发项目往往包含很多复杂的流程和具体的细节。因此,一套完整且标准的研发项目管理制度和流程对项目的推进至关重要。研发项目管理是成功推动创新和技术发展的关键因素。然而在实际管理中,研发项目管理常常面临着需求不确定、技术风险、人员素质、成本和…

STM32-寄存器DMA配置指南

配置步骤 在STM32F0xx中文参考手册中的DMA部分在开头给出了配置步骤 每个通道都可以在外设寄存器固定地址和存储器地址之间执行 DMA 传输。DMA 传输的数据 量是可编程的,最大达到 65535。每次传输之后相应的计数寄存器都做一次递减操作,直到 计数为&am…

电脑屏幕录制软件,分享4款(2024最新)

在今天,我们的电脑屏幕成为了一个多彩多姿的窗口。通过它我们可以浏览网页、观看视频、处理文档、进行游戏……有时,我们想要记录下这些精彩瞬间,与朋友分享,或者作为教程留存,这时,电脑屏幕录制就显得尤为…

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版

这篇文章是高级题库答案纯享版,只有需要选择的选项。如果需要查看所有选项,可以点击下方链接跳转。此文章准确率60%~70%,不敢保证能过,仅提供参考。以考代学,还是推荐点击下方链接,查看完整的题库&#xff…

亚信安慧AntDB亮相PostgreSQL中国技术大会,获“数据库最佳应用奖”并分享数据库应用实践

7月12日,第13届PostgreSQL中国技术大会在杭州顺利举办,亚信安慧AntDB数据库荣获“数据库最佳应用奖”。大会上,亚信安慧AntDB数据库同事带来《基于AntDB的CRM系统全域数据库替换实践》和《亚信安慧AntDB数据库运维之路》两场精彩演讲&#xf…

【网络】网络编程套接字——UDP、TCP、UDP接口使用、TCP接口使用、UDP程序实例、TCP程序实例

文章目录 Linux网络1. UDP1.1 UDP接口使用1.1 UDP程序实例 2. TCP2.1 TCP接口使用2.2 TCP程序实例 Linux网络 1. UDP 在使用我们的UDP和TCP函数的时候,我们需要理解一些预备的知识: 源 IP 地址和目的 IP 地址: 在网络通信中,IP …

电脑软件:推荐一款非常好用的图片编辑软件——Photo Pos Pro

目录 一、软件简介 二、功能介绍 三、使用说明 四、软件特点 一、软件简介 Photo Pos Pro 4是一款非常实用的图像编辑软件,专为需要修图的用户量身打造而成。软件拥有简洁的用户界面,操作起来也比较简单,能够帮助用户轻松处理图片。软件具…