在看bilinear cnn论文时,文章中描述经过两个网络分别得到的两个特征图,假设形状均为3×5×5,对两个特征图相同位置的3×1的特征向量作外积,得到3×3的矩阵,而特征图有5×5=25个位置,因此有25个这样的3×3矩阵,之后采用sum_pooling,也就是25个矩阵对应位置相加,最终得到的矩阵打为一维,后经过有符号的开根号、L2 normalization进行SVM判断。具体计算如下所示:
此计算的效果等同于将两个3×5×5的特征图转为3×25的特征图,之后两个3×25的特征图作外积,得到的效果与上面的效果相同。
代码如下:
import torch
if __name__=="__main__":
x = torch.randn((