汇聚(pooling)层等于池化层,它具有双重目的:降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。
空间降采样通常指的是在图像或信号处理中,通过减少数据的空间维度来降低数据量,同时尽可能保留重要的信息。
在卷积神经网络(CNN)中,卷积层对空间降采样具有一定的敏感性,这意味着卷积层对输入数据的空间位置变化比较敏感。例如,如果输入图像中的一个特征(如边缘或纹理)发生轻微的平移,卷积层可能会检测到不同的输出。这种敏感性在某些情况下是有益的,因为它允许网络捕捉到精确的特征位置,但在其他情况下,我们可能希望网络对输入的微小变化更加鲁棒。
为了降低这种敏感性并提高网络对输入变化的鲁棒性,通常会在卷积层之后引入池化层(Pooling Layer)。
def pool2d(X, pool_size, mode='max'):
p_h, p_w = pool_size
Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))
for i in range(Y.shape[0]):
for j in range(Y.shape[1]):
if mode == 'max':
Y[i, j] = X[i: i + p_h, j: j + p_w].max()
elif mode == 'avg':
Y[i, j] = X[i: i + p_h, j: j + p_w].mean()
return Y
多通道
在处理多通道输入数据时,汇聚层在每个输入通道上单独运算,而不是像卷积层一样在通道上对输入进行汇总。 这意味着汇聚层的输出通道数与输入通道数相同。
所以要连接张量构建通道。
X = torch.cat((X, X + 1), 1)