Pytorch自适应平均池化工作原理二(AdaptiveAvgPool2d无法导出ONNX,寻找替换方法)

Pytorch自适应平均池化工作原理(AdaptiveAvgPool2d无法导出ONNX,寻找替换方法)-CSDN博客

上一篇因为数据采用的是0-40升序排序的数据,导致下采样有错误的地方,被Sweetwater_zar发现,刚开始看到“输出维度小于输入维度”没看懂,因为维度始终都是4维,他的意思应该是第三第四维的长度;然后就是公式肯定是有的,但是官方并没有给出,所以只能通过数据来推测计算过程

重新生成随机数,再观察结果

import torch
original_shape = (1, 2, 4, 5)
# 0到10之间的浮点数随机张量
x = torch.rand(original_shape) * 10
pool1 = torch.nn.AdaptiveAvgPool2d(3)
pool2 = torch.nn.AdaptiveAvgPool2d(6)
y1 = pool1(x)
y2 = pool2(x)
print(x)
print(y1)
print(y2)

x:
tensor([[[[ 6., 10.,  5.,  2.,  8.],
          [ 9.,  7.,  0.,  8.,  0.],
          [ 6.,  4.,  8.,  4.,  6.],
          [ 2.,  5.,  5.,  9.,  0.]],

         [[ 4.,  7.,  6.,  5.,  2.],
          [ 6.,  6.,  2., 10.,  3.],
          [ 7.,  7.,  9.,  7.,  8.],
          [ 0.,  9.,  0.,  2.,  3.]]]])
y1:
tensor([[[[8.0000, 5.3333, 4.5000],
          [6.5000, 5.1667, 4.5000],
          [4.2500, 5.8333, 4.7500]],

         [[5.7500, 6.0000, 5.0000],
          [6.5000, 6.8333, 7.0000],
          [5.7500, 5.6667, 5.0000]]]])
第一行:
8.0000, 5.3333, 4.5000
8.0=(6+10+9+7)/4
5.3=(10+5+2+7+0+8)/6
4.5=(2+8+8+0)/4
第一列:
8.0000,
6.5000,
4.2500,
8.0=(6+10+9+7)/4
6.5=(9+7+6+4)/4
4.25=(6+4+2+5)/4

改成随机数后可见:
在行方向5列中kernel.w=2,stride.w=2,但中间多出一列kernel.w=3
在列方向4行中kernel.h=2,stride.h=1,刚好采集3个数据
中间的一列卷积核尺寸是3*2 

y2:
tensor([[[[6.0000, 8.0000, 7.5000, 3.5000, 5.0000, 8.0000],
          [7.5000, 8.0000, 5.5000, 3.7500, 4.5000, 4.0000],
          [9.0000, 8.0000, 3.5000, 4.0000, 4.0000, 0.0000],
          [6.0000, 5.0000, 6.0000, 6.0000, 5.0000, 6.0000],
          [4.0000, 4.2500, 5.5000, 6.5000, 4.7500, 3.0000],
          [2.0000, 3.5000, 5.0000, 7.0000, 4.5000, 0.0000]],

         [[4.0000, 5.5000, 6.5000, 5.5000, 3.5000, 2.0000],
          [5.0000, 5.7500, 5.2500, 5.7500, 5.0000, 2.5000],
          [6.0000, 6.0000, 4.0000, 6.0000, 6.5000, 3.0000],
          [7.0000, 7.0000, 8.0000, 8.0000, 7.5000, 8.0000],
          [3.5000, 5.7500, 6.2500, 4.5000, 5.0000, 5.5000],
          [0.0000, 4.5000, 4.5000, 1.0000, 2.5000, 3.0000]]]])
​第一行:
6.0000, 8.0000, 7.5000, 3.5000, 5.0000, 8.0000
6.0=6.0
8.0=(6+10)/2
7.5=(10+5)/2
3.5=(5+2)/2
5.0=(2+8)/2
8.0=8
第一列:
6.0000,
7.5000,
9.0000,
6.0000,
4.0000,
2.0000,
6.0=6.0
7.5=(6+9)/2
9.0=9.0
6.0=6.0
4.0=(6+2)/2
2.0=2.0

改成随机数后可见:
向上采样时和之前是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值