pytorch中的广播语义是什么-mile米乐体育

pytorch中的广播语义是什么

这篇文章主要介绍“pytorch中的广播语义是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytorch中的广播语义是什么”文章能帮助大家解决问题。

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中的广播语义是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注恰卡编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图