当前位置: 首页 > 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><…...

为什么选择Webpack:Awesome-Webpack项目终极指南与核心价值解析

为什么选择Webpack&#xff1a;Awesome-Webpack项目终极指南与核心价值解析 【免费下载链接】awesome-webpack A curated list of awesome Webpack resources, libraries and tools 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-webpack Webpack作为现代前端开…...

DeepSeek-OCR-2性能压测报告:深求·墨鉴单节点QPS与延迟实测分析

DeepSeek-OCR-2性能压测报告&#xff1a;深求墨鉴单节点QPS与延迟实测分析 1. 引言&#xff1a;为什么需要性能压测&#xff1f; 最近&#xff0c;一款名为“深求墨鉴”的文档解析工具在技术圈里悄悄火了起来。它基于DeepSeek-OCR-2引擎&#xff0c;号称能将扫描文档、书籍图…...

UE5回放系统避坑指南:解决ReplaySystem在蓝图项目中的常见崩溃与Bug

UE5回放系统深度排雷手册&#xff1a;蓝图项目中的崩溃预防与高阶调试技巧 当你第一次在UE5中成功录制并回放角色动作时&#xff0c;那种成就感无与伦比。但很快&#xff0c;奇怪的崩溃、无法解释的画面冻结、以及幽灵般的抗锯齿异常就会接踵而至。这些不是你的代码问题——而是…...

tts-vue本地语音合成解决方案:从技术原理到生产实践

tts-vue本地语音合成解决方案&#xff1a;从技术原理到生产实践 【免费下载链接】tts-vue &#x1f3a4; 微软语音合成工具&#xff0c;使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 一、破解本地化语音合成的技…...

nli-distilroberta-base精彩案例:开源项目README与代码功能逻辑一致性验证

nli-distilroberta-base精彩案例&#xff1a;开源项目README与代码功能逻辑一致性验证 1. 项目概述 在开源项目开发中&#xff0c;README文档与代码实现的一致性至关重要。nli-distilroberta-base作为基于DistilRoBERTa的自然语言推理(NLI)Web服务&#xff0c;为解决这一问题…...

AI 净界环境搭建:利用 Docker 镜像免配置运行

AI 净界环境搭建&#xff1a;利用 Docker 镜像免配置运行 你是不是也遇到过这样的烦恼&#xff1f;好不容易拍了一张满意的照片&#xff0c;或者找到一张心仪的素材图&#xff0c;却因为背景杂乱而无法直接使用。用传统的抠图工具&#xff0c;要么边缘粗糙得像狗啃的&#xff…...

Obsidian-skills安全测试完整指南:识别和修复5大关键安全漏洞

Obsidian-skills安全测试完整指南&#xff1a;识别和修复5大关键安全漏洞 【免费下载链接】obsidian-skills Agent skills for Obsidian. Teach your agent to use Markdown, Bases, JSON Canvas, and use the CLI. 项目地址: https://gitcode.com/GitHub_Trending/ob/obsidi…...

全志A40I Android7.1系统开机自启动实现与优化指南

1. 全志A40I Android7.1开机自启动基础原理 全志A40I作为一款广泛应用于嵌入式设备的芯片&#xff0c;在Android7.1系统下实现开机自启动有其特殊性。与传统的Linux系统不同&#xff0c;Android的自启动机制更复杂&#xff0c;需要同时考虑内核层和应用层的配合。我曾在多个A40…...

制造业如何通过发布带有硬核测试数据和公差对比的 Markdown 表格,极大地提升 DeepSeek 的抓取率?

传统信息源缺乏结构化特征导致大模型难以抽取参数实体。通过部署 GEO 生成式引擎优化&#xff0c;将硬核测试数据封入 Markdown 表格&#xff0c;可强制建立高权重语义关联&#xff0c;直接在AI搜索结果中拦截并影响高意向采购决策。传统分发体系失效的底层逻辑拆解大模型时代&…...

Claude Code 进阶篇:玩转内置 `/loop` 命令,定时任务 + 大白话,搞定监控只要一句话

每天免费领 1亿 Token&#xff0c;白嫖DeepSeek、GLM、MiniMax、Kimi等大模型&#xff01; 这篇文章分享给&#xff1a;天天用 Claude Code 写代码的兄弟们&#xff0c;教你把那些烦人的重复监控活儿&#xff0c;从“肉眼盯着”变成“自动播报”。 每天免费领 1亿 Token&#…...