pytorch学习(5)
广播机制(broadcast)
矩阵运算往往都是在两个维度相同或者相匹配(前面矩阵的列数等于后一个矩阵的行数)的矩阵之间定义的,广播机制亦是如此。在机器学习的某些算法中会出现两个维度不相同也不匹配的矩阵进行运算,那么这时候就需要广播机制来解决。
broadcast的两个特点
- 能够进行相同维度的扩展,相当于expand,但是是自动扩展
- 扩展时不需要拷贝数据,节约内存
- 注意:broadcast并不时函数,而是在不同size的tensor之间进行加减操作会自动进行的一种机制
broadcast的主要思想
- 依次从最后一个维度开始匹配,若前面没有维度则插入一个新的维度,size为1
- 自动调用expand函数使得维度size相同
eg:
Feature maps: [4,32,14,14]
Bias: [32,1,1] => [1,32,1,1] => [4,32,14,14]
import torch
a = torch.rand(4,32,8) #创建一个三维的tensor
bias = torch.tensor(5) #创建一个标量
score = a + bias #通过broadcast进行转换进行运算
print(a.shape)
print(bias.shape)
print(score.shape)
-------------------------------------------------------
torch.Size([4, 32, 8])
torch.Size([])
torch.Size([4, 32, 8])