pytorch 用卷积来表示平均池化

我们知道平均池化的作用就是kernel_size大小的池化窗口在特征图上滑动,池化窗口覆盖到的特征图的值相加后平均作为该覆盖区域的值输出。如果我们用卷积的操作去表示平均池化,卷积的权重可以表示为(假设为二维数据,kernel_size=3):
在这里插入图片描述
注意:此时卷积核的权重不再是可训练参数。

代码实现:

# 定义卷积核的权重参数
def define_Conv_to_Avg2d(in_channel,out_channel,kernel_size):
    if isinstance (kernel_size,int):
        weight=torch.ones((in_channel,out_channel,kernel_size,kernel_size))
        xs=kernel_size*kernel_size
        weight=weight/xs
        
    elif isinstance (kernel_size,tuple) and len(kernel_size)==2:
        weight=torch.ones((in_channel,out_channel,kernel_size[0],kernel_size[1]))
        xs=kernel_size[0]*kernel_size[1]
        weight=weight/xs
        
    else:
        print('kernel_size size error!')
    
    return weight
Pi = nn.Conv3d(in_channel,out_channel,kernel_size=3,stride=2, padding=1, bias=False)

# 因为池化不改变通道大小,所以这里in_channel=out_channel
Pi.weight=torch.nn.Parameter(define_Conv_to_Avg2d(in_channel,out_channel,kernel_size=3),requires_grad=False)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值