转载自:https://www.pytorchtutorial.com/pytorch-tensor-broadcasting/,本文只做个人记录学习使用,版权归原作者所有。
Broadcasting是指再运算中,不同大小的两个tensor该如何处理的操作。通常情况下,小一点的tensor会被broadcast到大一点的,这样才能保持大小一致。Broadcasting过程中的循环操作都在C底层进行,所以速度比较快。但也有一些情况下Broadcasting会带来性能上的下降。
两个Tensors只有在下列情况下下才能进行broadcasting操作:
- 每个tensor至少有一维
- 遍历所有的维度,从尾部维度开始,每个对应的维度大小要么相同,要么其中一个是1,要么其中一个不存在
让我们来看一些代码示例:
#相同维度,一定可以broadcasting
x=torch.empty(5,7,3)
y=torch.empty(5,7,3)
#没有符合“至少有一个维度”,所以不可以broadcasting
x=torch.empty((0,))
y=torch.empty(2,2)
#按照尾部对齐
x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)
#1st尾部维度:都为1
#2nd尾部维度:y为1,“要么其中一个是1”
#3rd尾部维度:都为3
#4th尾部维度:y不不在,“要么有一个不存在”
#综上,x和y是可以broadcasting的
#但是
x=torch.empty(5,2,4,1)
y=torch.empty( 3,1,1)
# 1st尾部维度:都为1
# 2nd尾部维度:y为1,“要么其中一个是1”
# 3rd尾部维度:x为2,y为3,不符合broadcasting要求!