pytorch中对于tensor的一些骚操作

使用环境:pytorch1.3.1;python3.6

最近在读pytorch官方实现的Faster RCNN代码时,发现了一些非常规的tensor操作,为了方便理解,在此记录下:

  1. (a[:, None] * b[None, :]).view(-1)

这是在计算anchor的k值出现的操作,其中a为一维向量[a1, a2, …, an],b也为一维向量[b1, b2, …, bm]。a[:, None]目的是增加一个新维度shape从[n] -> [n, 1],同理b[None, :]的shape从[m] -> [1, m]。接着两个矩阵相乘shape从[n, 1] * [1, m] -> [n, m] ,最后通过view(-1)展开成一维[n, m] -> [nm]。通俗的说,假设面积尺度有n个,高宽比例因子有m个,那么就能够组合成n * m个不同的矩形框(anchor)。

)在这里插入图片描述

  1. (a.view(-1, 1, 4) + b.view(1, -1, 4)).reshape(-1, 4)

这是将所有anchor绘制到原图上的出现的操作,a为二维向量shape为[n, 4],b也为二维向量shape为[m, 4],view和reshape的功能是类似的,a.view(-1, 1, 4)操作后shape[m, 4] -> [m, 1, 4],b.view(1, -1, 4)操作后shape[n, 4] -> [1, n, 4],接下来的相加就是一波骚操作了,按常理来讲两个维度不同的矩阵是不能相加的,但torch的tensor是可以的,a.view(-1, 1, 4)+b.view(1, -1, 4)后的shape是[m, n, 4],如下图所示(我个人理解的相加过程),假设shape代表维度(x, y, z),m=2, n=3, 首先我们对a进行view后得到我们图中的Tensor(a) shape[2, 1, 4]可以理解x方向两个单位,y方向一个单位,z方向4个单位。接着我们对b进行view得到我们图中的Tensor(b) shape[1, 3, 4]可以理解x方向一个单位,y方向三个单位,z方向4个单位。为了Tensor(a)和Tensor(b)能够相加,Tensor(a)在y方向复制了m=3次,Tensor(b)在x方向复制了n=2次,这样就得到了相同维度的两个Tensor shape[2, 3, 4],这样就可以愉快的相加了。最后在reshape一下得到tensor的shape为[m*n, 4]。

在这里插入图片描述这点有什么学习的?
跟自己的tensor的计算提供了范例。
在这里插入图片描述

————————————————
版权声明:本文为CSDN博主「太阳花的小绿豆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37541097/article/details/103503321

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值