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

python打卡训练营打卡记录day48

知识点回顾:
  1. 随机张量的生成:torch.randn函数
  2. 卷积和池化的计算公式(可以不掌握,会自动计算的)
  3. pytorch的广播机制:加法和乘法的广播机制

ps:numpy运算也有类似的广播机制,基本一致

作业:自己多借助ai举几个例子帮助自己理解即可

广播机制(Broadcasting)在PyTorch中的规则:

广播机制允许在不同形状的张量之间进行运算。它的基本规则是:

1. 从尾部(即维度从后往前)开始对齐,比较两个张量的每一个维度。

2. 两个维度必须相等,或者其中一个为1,或者其中一个不存在(即其中一个张量在该维度上没有大小),才能进行广播。

3. 广播会在缺失的维度(通过unsqueeze)和大小为1的维度上扩展(复制)数据。

例如:

张量A的形状为(3, 1, 5),张量B的形状为(2, 1):

从尾部对齐:

A: (3, 1, 5)

B:      (2,1)

将B的形状与A的尾部对齐:即A的第三维(5)和B的第二维(1)对齐,A的第二维(1)和B的第一维(2)对齐,A的第一维(3)没有对应的,所以B要在前面加一个维度。

所以实际上,我们这样看:

A: 3×1×5

B: 1×2×1 (在B前面加了一个1,变成3维:1×2×1)

然后每个维度比较:

第一维:3和1 -> 1可以扩展成3

第二维:1和2 -> 1可以扩展成2

第三维:5和1 -> 1可以扩展成5

所以最终形状为(3,2,5)

规则:如果两个张量在某个维度上相同,或者其中一个为1,那么它们就是兼容的。如果其中一个张量在某个维度上缺失(即维度数少于另一个),那么就在该张量的形状前面补1,直到两个张量的维度数相同。

然后,在运算时,每个维度的大小会取两个张量在该维度上的最大值(前提是它们兼容)。

下面举几个例子:

例1:

A: (8,1,6,1)

B: (7,1,5)

首先,将B的维度数补齐到4维(在B前面加一个1):(1,7,1,5)

然后,比较每个维度:

dim0: 8和1 -> 8

dim1: 1和7 -> 7

dim2: 6和1 -> 6

dim3: 1和5 -> 5

所以广播后的形状为(8,7,6,5)

例2:

A: (3,1,5)

B: (1,2,1)

广播后形状为(3,2,5)

例3(不兼容):

A: (3,4)

B: (2,)

首先,将B的维度补齐:(1,2) 然后与A(3,4)比较:

第一维:3和1 -> 3

第二维:4和2 -> 4和2不相等,且都不是1,所以不能广播。

但是,如果B是(4,)呢?

A: (3,4)

B: (4,) -> 补齐为(1,4)

然后比较:第一维3和1 -> 3;第二维4和4 -> 4,所以可以广播成(3,4)

注意:在PyTorch中,我们通常使用加法、乘法等操作时会触发广播。

广播机制要点总结

核心价值:避免不必要的内存复制,提升计算效率

触发场景:所有逐元素操作(+, -, *, / 等)

应用场景:

   归一化操作(张量 ± 标量)

   特征图与偏置项相加

   不同维度的张量运算

@浙大疏锦行

http://www.xdnf.cn/news/12764.html

相关文章:

  • VLM引导的矢量草图生成AutoSketch
  • 数据库入门:从原理到应用
  • Windows之官方Sysinternals工具集
  • ubuntu 系统分区注意事项
  • 36 C 语言内存操作函数详解:memset、memcpy、memccpy、memmove、memcmp、memchr
  • 开启二进制日志 MySQL显示关闭,关闭二进制日志 MySQL恢复正常
  • 全球人工智能技术大会(GAITC 2025):技术前沿与产业融合的深度交响
  • Prompt工程学习之思维树(TOT)
  • C++课设:从零开始打造影院订票系统
  • .net 可以调试的Windows服务框架Topshelf
  • ClickHouse 25.3 json列类型使用示例
  • 基于自适应虚拟谐波阬的光储VSG并网电流谐波抑制模型
  • 归并排序:分治思想的高效排序
  • UDP 与 TCP 的区别是什么?
  • CppCon 2015 学习:Memory and C++ debugging at Electronic Arts
  • day6 cpp:c中处理字符串,c++string
  • 第二十周:Redis(二)
  • 条件语句易错点
  • Android 集成 Firebase 指南
  • 如何写一篇基于Spring Boot + Vue + 微信小程序的软件的接口文档
  • Tavily 技术详解:为大模型提供实时搜索增强的利器
  • 行为设计模式之Iterator(迭代器)
  • Ubuntu20.04中MySQL的安装和配置
  • 【iOS】JSONModel源码学习
  • LLMs 系列科普文(8)
  • 多线程语音识别工具
  • 【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
  • 告别 @MockBean!在 Spring Boot 3.2+ 中使用 @MockitoBean 进行单元测试
  • 智慧园区管理平台
  • 阿里云Alibaba Cloud安装Docker与Docker compose【图文教程】