广播机制 从后往前依次检查维度,如果两个张量对应的维度上数目相等,则会按照该维度相加

  若其中一个维度数目为1,则会应用广播机制.

如:

a = torch.arange(3).reshape([1, 3, 1]) 
b = torch.arange(3).reshape([1, 3, 1])
a + b  #维度均相等

  输出为:

tensor([[[0],
         [2],
         [4]]])

  维度不相等_1:

a = torch.arange(3).reshape([1, 3, 1])
b = torch.arange(6).reshape([1, 3, 2])
a + b #维度不相等_1

  理解为: 

a是tensor([[[0],[1],[2]]])     增加维度,广播为: tensor([[0, 0], [1, 1], [2, 2]])   b为tensor([[[0, 1], [2, 3], [4, 5]]])

则  a + b = tensor([[[0, 1], [3, 4], [6, 7]]])

  同理,可以获得如下结果:

a = torch.arange(3).reshape([1, 3, 1])
b = torch.arange(6).reshape([1, 3, 2])
a + b

>>>tensor([[[0, 1], [3, 4], [6, 7]]])

  

a = torch.arange(3).reshape([1, 3, 1])
b = torch.arange(2).reshape([1, 1, 2])
a + b

>>>tensor([[[0, 1], [1, 2], [2, 3]]])

  

a = torch.arange(3).reshape([1, 3, 1])
b = torch.arange(6).reshape([3, 1, 2])
a + b

>>>tensor([[[0, 1], [1, 2], [2, 3]],
[[2, 3], [3, 4], [4, 5]],
[[4, 5], [5, 6], [6, 7]]])