译者:冯宝宝
许许多多的PyTorch操作都支持NumPy Broadcasting Semantics
。
简而言之,如果PyTorch操作支持广播,那么它的Tensor参数可以自动扩展为相同的类型大小(不需要复制数据)。
一般语义
如果遵守以下规则,则两个张量是“可广播的”:
- 每个张量至少有一个维度;
- 遍历张量维度大小时,从末尾随开始遍历,两个张量的维度大小必须相等,它们其中一个为1,或者一个不存在。
例如:
>>> x=torch.empty(5,7,3)
>>> y=torch.empty(5,7,3)
# 相同形状的张量可以被广播(上述规则总是成立的)
>>> x=torch.empty((0,))
>>> y=torch.empty(2,2)
# x和y不能被广播,因为x没有维度
# can line up trailing dimensions
>>> x=torch.empty(5,3,4,1)
>>> y=torch.empty( 3,1,1)
# x和y能够广播.
# 1st trailing dimension: both have size 1
# 2nd trailing dimension: y has size 1
# 3rd trailing dimension: x size == y size
# 4th trailing dimension: y dimension doesn't exist
# 但是:
>>> x=torch.empty(5,2,4,1)
>>> y=torch.empty( 3,1,1)
# x和y不能被广播 ( )