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

深度学习 - 张量的广播机制和复杂运算

张量的广播机制(Broadcasting)是一种处理不同形状张量进行数学运算的方式。通过广播机制,PyTorch可以自动扩展较小的张量,使其与较大的张量形状兼容,从而进行元素级的运算。广播机制遵循以下规则:

  1. 如果张量维度不相同,在较小张量的形状前面加上1,直到两个张量的维度相同。
  2. 如果两个张量在某个维度的长度不相同,但其中一个张量在该维度的长度为1,那么在该维度上,较小长度的张量会被扩展为较大长度。
  3. 如果两个张量在任何维度上长度不同且均不为1,则无法进行广播,会引发错误。

广播机制的规则示例

规则1:在较小张量的形状前面加1
a = torch.tensor([1, 2, 3])
b = torch.tensor([[1], [2], [3]])
c = a + b
print(c)

运行结果

tensor([[2, 3, 4],[3, 4, 5],[4, 5, 6]])

解释a的形状是(3,), b的形状是(3,1)。在较小的张量前面加1变成(1,3)和(3,1),然后在第0维度上广播。

规则2:在某个维度的长度为1
a = torch.tensor([[1, 2, 3]])
b = torch.tensor([[4], [5], [6]])
c = a + b
print(c)

运行结果

tensor([[5, 6, 7],[6, 7, 8],[7, 8, 9]])

解释a的形状是(1,3), b的形状是(3,1)。a被广播到(3,3),b也被广播到(3,3)。

规则3:无法广播的情况
a = torch.tensor([1, 2, 3])
b = torch.tensor([[1, 2], [3, 4]])
try:c = a + b
except RuntimeError as e:print(e)

运行结果

The size of tensor a (3) must match the size of tensor b (2) at non-singleton dimension 1

解释a的形状是(3,), b的形状是(2,2),它们的形状不兼容,无法进行广播。

广播机制的详细示例

示例1:标量与多维张量相加
a = torch.tensor(5)
b = torch.tensor([[1, 2, 3], [4, 5, 6]])
c = a + b
print(c)

运行结果

tensor([[ 6,  7,  8],[ 9, 10, 11]])

解释:标量a被广播到与b形状匹配,变成(2,3)。

示例2:形状不一致但能广播
a = torch.tensor([1, 2, 3])
b = torch.tensor([[1], [2], [3]])
c = a + b
print(c)

运行结果

tensor([[2, 3, 4],[3, 4, 5],[4, 5, 6]])

解释a的形状是(3,), b的形状是(3,1)。a被广播到(3,3),b被广播到(3,3)。

示例3:不同维度的广播
a = torch.tensor([1, 2, 3])
b = torch.tensor([[[1]], [[2]], [[3]]])
c = a + b
print(c)

运行结果

tensor([[[2, 3, 4]],[[3, 4, 5]],[[4, 5, 6]]])

解释a的形状是(3,),b的形状是(3,1,1)。a被广播到(3,1,3),b被广播到(3,1,3)。

示例4:标量与高维张量的广播
a = torch.tensor(10)
b = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
c = a * b
print(c)

运行结果

tensor([[[10, 20],[30, 40]],[[50, 60],[70, 80]]])

解释:标量a被广播到与b的形状匹配。

示例5:不同形状的广播加法
a = torch.tensor([[1, 2], [3, 4], [5, 6]])
b = torch.tensor([10, 20])
c = a + b
print(c)

运行结果

tensor([[11, 22],[13, 24],[15, 26]])

解释a的形状是(3,2),b的形状是(2,)。b被广播到(3,2)。

张量的基本操作

示例1:基本运算
a = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = torch.tensor([[[2, 2], [2, 2]], [[2, 2], [2, 2]]])
c = a * b
print(c)

运行结果

tensor([[[ 2,  4],[ 6,  8]],[[10, 12],[14, 16]]])

解释:对ab中的每个元素进行乘法运算。

示例2:列表索引
a = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = a[0]
print(b)

运行结果

tensor([[1, 2],[3, 4]])

解释:选择张量a的第0个二维子张量。

示例3:范围索引
a = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = a[:, 0, :]
print(b)

运行结果

tensor([[1, 2],[5, 6]])

解释:选择张量a中所有的第0个二维子张量的所有元素。

示例4:布尔索引
a = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = a > 4
c = a[b]
print(c)

运行结果

tensor([5, 6, 7, 8])

解释:选择张量a中所有大于4的元素。

示例5:多维索引
a = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = a[1, 1, 1]
print(b)

运行结果

tensor(8)

解释:选择张量a的第二个三维子张量中的第二个二维子张量中的第二个元素。

示例6:形状操作(reshape)
a = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = a.reshape(4, 2)
print(b)

运行结果

tensor([[1, 2],[3, 4],[5, 6],[7, 8]])

解释:将张量a重塑为形状为(4, 2)的张量。

示例7:形状操作(squeeze)
a = torch.tensor([[[1, 2]], [[3, 4]], [[5, 6]]])
b = a.squeeze()
print(b)

运行结果

tensor([[1, 2],[3, 4],[5, 6]])

解释:删除张量a中所有为1的维度。

示例8:形状操作(unsqueeze)
a = torch.tensor([[1, 2], [3, 4], [5, 6]])
b = a.unsqueeze(1)
print(b)

运行结果

tensor([[[1, 2]],[[3, 4]],[[5, 6]]])

解释:在张量a的第一维度增加一个维度。

示例9:形状操作(transpose)
a = torch.tensor([[[1, 2, 3], [4, 5, 6]]])
b = a.transpose(1, 2)
print(b)

运行结果

tensor([[[1, 4],[2, 5],[3, 6]]])

解释:交换张量a的第1维和第2维。

示例10:形状操作(permute)
a = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = a.permute(2, 0, 1)
print(b)

运行结果

tensor([[[1, 3],[5, 7]],[[2, 4],[6, 8]]])

解释:根据指定的顺序重新排列张量a的维度。

相关文章:

深度学习 - 张量的广播机制和复杂运算

张量的广播机制(Broadcasting)是一种处理不同形状张量进行数学运算的方式。通过广播机制,PyTorch可以自动扩展较小的张量,使其与较大的张量形状兼容,从而进行元素级的运算。广播机制遵循以下规则: 如果张量…...

【CSS】will-change 属性详解

目录 基本语法属性值常见用途will-change 如何用于优化动画效果示例: will-change 是一个 CSS 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化渲染性能,提前做一些准备工作,从而提高性能。 基本语法…...

linux安装mysql后,配置mysql,并连接navicat软件

Xshell连接登陆服务器 输入全局命令 mysql -u root -p 回车后,输入密码,不显示输入的密码 注意mysql服务状态,是否运行等 修改配置文件my.cnf,这里没找到就找my.ini,指定有一个是对的 find / -name my.cnf 接下…...

【学习笔记】Axios、Promise

TypeScript 1、Axios 1.1、概述 1.2、axios 的基本使用 1.3、axios 的请求方式及对应的 API 1.4、axios 请求的响应结果结构 1.5、axios 常用配置选项 1.6、axios.create() 1.7、拦截器 1.8、取消请求2、Promise 2.1、封装 fs 读…...

自然资源-关于加强规划实施监督管理的指导意见(浙江省自然资源厅学习借鉴)

自然资源-关于加强规划实施监督管理的指导意见(浙江省自然资源厅(征求意见稿)学习借鉴 以下为征求意见稿的内容,很多干活: 各市、县(市、区)自然资源主管部门: 为加强国土空间规划…...

408链表的创建和初始化

首先第一个头文件,定义结构体类型 typedef struct LNode {int data;struct LNode* next; }LNode,*LinkList; //可能作为第一次写c语言的小伙伴看不懂这一段typedef是如何定义的 //基本的解释如下所示 //typedef struct LNode LNode; //typedef struct LNode* LinkL…...

Python数据框/列表生成一列多个同样的值

例1:Python生成100个数字2 方法一: import numpy as np a np.random.randint(2,3,100) 方法二: a [2] list a * 100 #100个数字2的列表 例2:生成100个字符串棒 b 棒 list_b b * 100...

使用 MDC 实现日志链路跟踪,包教包会!

在微服务环境中,我们经常使用 Skywalking、Spring Cloud Sleut 等去实现整体请求链路的追踪,但是这个整体运维成本高,架构复杂,本次我们来使用 MDC 通过 Log 来实现一个轻量级的会话事务跟踪功能,需要的朋友可以参考一…...

【成都信息工程大学】只考程序设计!成都信息工程大学计算机考研考情分析!

成都信息工程大学(Chengdu University of Information Technology),简称“成信大”,由中国气象局和四川省人民政府共建,入选中国首批“卓越工程师教育培养计划”、“2011计划”、“中西部高校基础能力建设工程”、四川…...

将单列数据帧转换成多列数据帧

文章目录 1. 查看数据文件2. 读取数据文件得到单例数据帧3. 将单列数据帧转换成多列数据帧 在本次实战中,我们的目标是将存储在HDFS上的以逗号分隔的文本文件student.txt转换为结构化的Spark DataFrame。首先,使用spark.read.text读取文件,得…...

信息学奥赛初赛天天练-20-完善程序-vector数组参数引用传递、二分中值与二分边界应用的深度解析

PDF文档公众号回复关键字:20240605 1 2023 CSP-J 完善程序1 完善程序(单选题,每小题 3 分,共计 30 分) 原有长度为 n1,公差为1等升数列,将数列输到程序的数组时移除了一个元素,导致长度为 n 的开序数组…...

推荐系统学习 一

参考:一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新_数据库全量更新和增量更新流程图-CSDN博客 一文看懂推荐系统:概要01:推荐系统的基本概念_王树森 小红书-CSD…...

分库分表详解

文章目录 分库分表概述分库分表详解分库分表的策略分库分表的注意事项常用的分库分表中间件mysql单表达到多少数据量需要分库分表数据库分库分表缺点分表要停服吗,不停服怎么做 分库分表概述 分库分表是数据库架构设计中的一种常见策略,尤其是在面对大规…...

【java前端课堂】04_类的继承

类的继承 在Java中,继承是面向对象编程的四大基本特性之一,它允许我们根据一个已有的类来定义一个新的类,这个新的类继承了原有类的特性(属性和方法),并可以添加新的特性或修改原有特性。这样,…...

React nginx配置,一个端口代理多个项目(转发后找不到CSS,JS及图片资源问题解决)

场景: nginx 配置负载均衡,甲方只提供一个端口,一个域名地址 方法: 一个端口一个域名匹配多个应用 方法一: 依靠设备浏览器区分: 使用UserAgent头来识别用户的客户端, CDN监测vary头的信息,如果内容不一致…...

Unity协程详解

什么是协程 协程,即Coroutine(协同程序),就是开启一段和主程序异步执行的逻辑处理,什么是异步执行,异步执行是指程序的执行并不是按照从上往下执行。如果我们学过c语言,我们应该知道&#xff0…...

【iOS】UI学习(二)

目录 前言UIViewContorllerUIViewContorller基础UIViewContorller使用 定时器和视图移动UISwitch控件UIProgressView和UISlider总结 前言 本篇博客是笔者在学习UI部分内容时的成果和遇到的一些问题,既是我自己的学习笔记,也希望对你有帮助~ …...

React路由(React笔记之五)

本文是结合实践中和学习技术文章总结出来的笔记(个人使用),如有雷同纯属正常((✿◠‿◠)) 喜欢的话点个赞,谢谢! React路由介绍 现在前端的项目一般都是SPA单页面应用,不再是以前多个页面多套HTML代码项目了,应用内的跳转不需要刷新页面就能完成页面跳转靠的就是路由系统 R…...

调用讯飞星火API实现图像生成

目录 1. 作者介绍2. 关于理论方面的知识介绍3. 关于实验过程的介绍,完整实验代码,测试结果3.1 API获取3.2 代码解析与运行结果3.2.1 完整代码3.2.2 运行结果 3.3 界面的编写(进阶) 4. 问题分析5. 参考链接 1. 作者介绍 刘来顺&am…...

reduce过滤递归符合条件的数据

图片展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...