pytorch中的广播语义

 更新时间:2022年03月09日 11:40:14   作者:机器学习入坑者  
这篇文章主要介绍了pytorch中的广播语义,pytorch的广播语义即broadcasting semantics,和numpy的很像,下面文章介绍更多相关内容的介绍,需要的小伙伴可以参考一下

pytorch的广播语义(broadcasting semantics),和numpy的很像,所以可以先看看numpy的文档

1、什么是广播语义?

官方文档有这样一个解释:

In short, if a PyTorch operation supports broadcast, then its Tensor arguments can be automatically expanded to be of equal sizes (without making copies of the data).

这句话的意思大概是:简单的说,如果一个pytorch操作支持广播,那么它的Tensor参数可以自动的扩展为相同的尺寸(不需要复制数据)。

按照我的理解,应该是指算法计算过程中,不同的Tensor如果size不同,但是符合一定的规则,那么可以自动的进行维度扩展,来实现Tensor的计算。在维度扩展的过程中,并不是真的把维度小的Tensor复制为和维度大的Tensor相同,因为这样太浪费内存了。

2、广播语义的规则

首先来看标准的情况,两个Tensor的size相同,则可以直接计算:

x = torch.empty((4, 2, 3))
y = torch.empty((4, 2, 3)) 
print((x+y).size()) 

输出:

torch.Size([4, 2, 3]) 

但是,如果两个Tensor的维度并不相同,pytorch也是可以根据下面的两个法则进行计算:

  • (1)Each tensor has at least one dimension.
  • (2)When iterating over the dimension sizes, starting at the trailing dimension, the dimension sizes must either be equal, one of them is 1, or one of them does not exist.
  • 每个Tensor至少有一个维度。
  • 迭代标注尺寸时,从后面的标注开始

第一个规则要求每个参与计算的Tensor至少有一个维度,第二个规则是指在维度迭代时,从最后一个维度开始,可以有三种情况:

  • 维度相等
  • 其中一个维度是1
  • 其中一个维度不存在

3、不符合广播语义的例子

x = torch.empty((0, ))
y = torch.empty((2, 3)) 
print((x + y).size())

输出:

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

这里,不满足第一个规则“每个参与计算的Tensor至少有一个维度”。

x = torch.empty(5, 2, 4, 1) 
y = torch.empty(3, 1, 1) 
print((x + y).size())

输出:

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

这里,不满足第二个规则,因为从最后的维度开始迭代的过程中,倒数第三个维度:x是2,y是3。这并不符合第二条规则的三种情况,所以不能使用广播语义。

4、符合广播语义的例子

x = torch.empty(5, 3, 4, 1) 
y = torch.empty(3, 1, 1) 
print((x + y).size()) 

输出:

torch.Size([5, 3, 4, 1]) 

x是四维的,y是三维的,从最后一个维度开始迭代:

  • 最后一维:x是1,y是1,满足规则二 
  • 倒数第二维:x是4,y是1,满足规则二 
  • 倒数第三维:x是3,y是3,满足规则一
  • 倒数第四维:x是5,y是0,满足规则一 

 到此这篇关于pytorch中的广播语义的文章就介绍到这了,更多相关pytorch广播语义内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 实例讲解Python中global语句下全局变量的值的修改

    实例讲解Python中global语句下全局变量的值的修改

    global是Python中的一个关键字用来,声明一个局部变量为全局变量,这里我们来以实例讲解Python中global语句下全局变量的值的修改,需要的朋友可以参考下.
    2016-06-06
  • python np.arange 步长0.1的问题需要特别注意

    python np.arange 步长0.1的问题需要特别注意

    这篇文章主要介绍了python np.arange 步长0.1的问题需要特别注意,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • python 实现将Numpy数组保存为图像

    python 实现将Numpy数组保存为图像

    今天小编就为大家分享一篇python 实现将Numpy数组保存为图像,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python简单几步获取各种DOS命令显示的内容详解流程

    python简单几步获取各种DOS命令显示的内容详解流程

    你会用python获取各种DOS命令显示的内容核心吗?说的可不是返回值,是用system()函数调用windows操作系统的DOS命令来做点事情,需要的朋友可以参考下
    2021-10-10
  • pytorch中关于backward的几个要点说明

    pytorch中关于backward的几个要点说明

    这篇文章主要介绍了pytorch中关于backward的几个要点说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python实现名片管理系统

    Python实现名片管理系统

    这篇文章主要为大家详细介绍了Python实现名片管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Python构建机器学习API服务的操作过程

    Python构建机器学习API服务的操作过程

    这篇文章主要介绍了Python构建机器学习API服务的操作过程,通过本文的指导,读者可以学习如何使用Python构建机器学习模型的API服务,并了解到在实际应用中需要考虑的一些关键问题和解决方案,从而为自己的项目提供更好的支持和服务,需要的朋友可以参考下
    2024-04-04
  • python对常见数据类型的遍历解析

    python对常见数据类型的遍历解析

    这篇文章主要介绍了python对常见数据类型的遍历解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python获取航线信息并且制作成图的讲解

    Python获取航线信息并且制作成图的讲解

    今天小编就为大家分享一篇关于Python获取航线信息并且制作成图的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 分析Python中设计模式之Decorator装饰器模式的要点

    分析Python中设计模式之Decorator装饰器模式的要点

    这篇文章主要介绍了Python中设计模式之Decorator装饰器模式模式,文中详细地讲解了装饰对象的相关加锁问题,需要的朋友可以参考下
    2016-03-03

最新评论