CNN中.view()和.shape()用法总结

.shape用法

在CNN中,我们在接入全连接层的时候,我们需要将提取出的特征图进行铺平,将特征图转换为一维向量。
这时候我们用到.view做一个resize的功能,用.shape来进行选择通道数。

我现在先说括号里的.shape()。
.shape()和.size()用法有点类似。
.shape[0]和.size(0)都是提取一维参量。
比如,
CNN特征图feature最终输出为(50,16,4,4)(B,C,H,W)
那么.shape[0]和.size(0)就是提取50(batch_size)这个数据。

.view()用法

比如,

a=torch.Tensor([[[1,2,3],[4,5,6]]])
b=torch.Tensor([1,2,3,4,5,6])

print(a.view(1,6))
print(b.view(1,6))

得到的结果都是tensor([[1., 2., 3., 4., 5., 6.]])

a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.view(3,2))

得到结果:tensor([[1., 2.],[3., 4.],[5., 6.]])

参数中的-1就代表这个位置由其他位置的数字来推断,只要在不致歧义的情况的下,view参数就可以推断出来,也就是人可以推断出形状的情况下,view函数也可以推断出来。比如a tensor的数据个数是6个,如果view(1,-1),我们就可以根据tensor的元素个数推断出-1代表6。

关于output = self.fc(feature.view(img.shape[0], -1))

就是子啊fc全连接之前,
比如最终生成(50,16,4,4)的特征图
我们将16张7*7特征图铺平为一个一维向量。因为batch_size设置为50. 那么img.shape[0]=50。
我们就生成了50 个 一位向量。输进全连接层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值