汇聚层

你能将平均汇聚层作为卷积层的特殊情况实现吗?


import torch

import torch.nn as nn

in_channel, out_channel = 1, 1

padding = 2

avg_pooling = nn.Conv2d(kernel_size=2, in_channels=in_channel, out_channels=out_channel, padding=0,stride=padding,bias=False)

nn.init.constant_(avg_pooling.weight, 1/4)

print(avg_pooling.weight)

X = torch.range(start=1, end=16).reshape((1,1,4, 4))

y = avg_pooling(X)

print(y)

'''

Parameter containing:

tensor([[[[0.2500, 0.2500],

          [0.2500, 0.2500]]]], requires_grad=True)

tensor([[[[ 3.5000,  5.5000],

          [11.5000, 13.5000]]]], grad_fn=<ConvolutionBackward0>)

'''

你能将最大汇聚层作为卷积层的特殊情况实现吗?

假设汇聚层的输入大小为 𝑐×ℎ×𝑤 ,则汇聚窗口的形状为 𝑝ℎ×𝑝𝑤 ,填充为 (𝑝ℎ,𝑝𝑤) ,步幅为 (𝑠ℎ,𝑠𝑤) 。这个汇聚层的计算成本是多少?

$c*((h+p_h-p_h)/s_h + 1 )((w+p_w-p_w)/s_w + 1 )(p_h*p_w-1 +1)$ -1是加法个数 后面+1是除法个数

为什么最大汇聚层和平均汇聚层的工作方式不同?

一个是找最大的元素,更侧重于检测响应大的点,求均值则会在一定程度上进行空间位置的融合。

我们是否需要最小汇聚层?可以用已知函数替换它吗?

最小汇聚层指的是最小响应的值?这样会造成信息大量丢失?

除了平均汇聚层和最大汇聚层,是否有其它函数可以考虑(提示:回想一下softmax)?为什么它不流行?

softmax需要学习参数且计算复杂

请问是为什么呀

你这个代码最大汇聚不是求最大值,而是求右下的值

我也感觉实现不了 :joy:
如果只是改变卷积核里的元素不动别的代码的话