维度转换
在torch中应用卷积的时候,我们有时候遇到一些问题。在cv领域我们常见的就是用二维卷积将图片中各种特征进行提取,但是目标检测、分割中都没有涉及到时域。但是一旦涉及到提取时域特征的话,下面三种维度转换就会非常有用,我们可以建立更加丰富的网络。我们可以用一维、二维、三维卷积提取到更加丰富的信息,提升我们网络的鲁棒性。
1.卷积维度合并
torch中torch.cat()和paddle、tensorflow中concate一样,将目标特征图在不同维度上进行拼接。
应用场景,当将特征图分块处理之后,我们在需要将特征进行形状还原的时候使用。而torch.add()代表 的尺寸一样的特征图进行内值相加。这种一般用于特征融合的,提取多特征的时候进行特征融合的时候使用。
// An highlighted block
x0 = torch.rand(3, 224, 224)
x1 = torch.rand(3, 224, 224)
y0 = torch.cat((x0, x1),0).size() #其中0代表合并的维度,表示在第一维度合并
print(y0)
y1 = torch.add(x0,x1).size()
print(y1)
输出结果
2 维度变换
尺度对应,当然tensor.view()还有其他用法,具体参考源码
将特征直接进维度融合,形状不一样,大小一样。
// An highlighted block
x0 = torch.rand(3, 224, 224)
c, h, w = x0.size()
x0_t0 = x0.view(c * h, w)
print(x0_t0.size())
输出结果

3 维度转换
类似于[h,w]转换成[w,h],在建立卷积网络的过程中需要用到不同维度卷积时,我们可以用以下方法进行维度转换来做卷积前的准备工作。
x0 = torch.rand(3, 224, 224)
print(x0.size())
x1 = x0.permute([2,0,1])#维度转换,[2,0,1]中表示矩阵的维度
print(x1.size())
输出结果

补充一点,用permute函数之后,我们需要用continuous函数进行连接,因为permute函数将原特征进行分裂重组了,使用continuous函数能够使得数据只进行维度转换,数据不会被打乱。
掌握以上的三个小技巧,我们建立网络就会更加得心应手!
6656



被折叠的 条评论
为什么被折叠?



