import torch
import torch.nn as nn
a = torch.arange(24).reshape(2,3,2,2).float()
s= nn.AdaptiveAvgPool2d(1)
print('a = ',a)
d = s(a)
print('d=',d.size())
print('d=',d)
b= nn.Sigmoid()
c = b(d)
print('c=',c)
a = tensor([[[[ 0., 1.],
[ 2., 3.]],
[[ 4., 5.],
[ 6., 7.]],
[[ 8., 9.],
[10., 11.]]],
[[[12., 13.],
[14., 15.]],
[[16., 17.],
[18., 19.]],
[[20., 21.],
[22., 23.]]]])
d= torch.Size([2, 3, 1, 1])
d= tensor([[[[ 1.5000]],
[[ 5.5000]],
[[ 9.5000]]],
[[[13.5000]],
[[17.5000]],
[[21.5000]]]])
c= tensor([[[[0.8176]],
[[0.9959]],
[[0.9999]]],
[[[1.0000]],
[[1.0000]],
[[1.0000]]]])
对于
nn.AdaptiveAvgPool2d(1)
求得的是一个(batchsize,channel,h,w)-------> (batchsize,channel,1,1)就是将H,W方向求平均的一个值。
对于是通道注意力机制采用sigmoid就可以求得空间位置像素的权值,这个是一个值,每一个位置都乘以这一个值。