做网站需要买服务器酒店建筑设计
web/
2025/10/7 3:16:27/
文章来源:
做网站需要买服务器,酒店建筑设计,erp系统免费版下载,摄影创意网站目录 一、池化层
1、最大池化层
2、平均池化层
3、总结
二、代码实现
1、最大池化与平均池化
2、填充和步幅(padding和strides)
3、多个通道
4、总结 一、池化层 1、最大池化层 2、平均池化层 3、总结
池化层返回窗口中最大或平均值环节卷积层对位置的敏感性同样有窗口…目录 一、池化层
1、最大池化层
2、平均池化层
3、总结
二、代码实现
1、最大池化与平均池化
2、填充和步幅(padding和strides)
3、多个通道
4、总结 一、池化层 1、最大池化层 2、平均池化层 3、总结
池化层返回窗口中最大或平均值环节卷积层对位置的敏感性同样有窗口大小、填充和步幅作为超参数
二、代码实现 通常当我们处理图像时我们希望逐渐降低隐藏表示的空间分辨率、聚集信息这样随着我们在神经网络中层叠的上升每个神经元对其敏感的感受野输入就越大。 而我们的机器学习任务通常会跟全局图像的问题有关例如“图像是否包含一只猫呢”所以我们最后一层的神经元应该对整个输入的全局敏感。通过逐渐聚合信息生成越来越粗糙的映射最终实现学习全局表示的目标同时将卷积图层的所有优势保留在中间层。
1、最大池化与平均池化 在下面的代码中的pool2d函数我们实现池化层的前向传播。然而这里我们没有卷积核输出为输入中每个区域的最大值或平均值。
import torch
from torch import nn
from d2l import torch as d2l
def pool2d(X, pool_size, modemax):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验证二维最大汇聚层的输出。 X torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
pool2d(X, (2, 2))
tensor([[4., 5.],[7., 8.]]) 此外我们还可以验证平均汇聚层。
pool2d(X, (2, 2), avg)
tensor([[2., 3.],[5., 6.]])
2、填充和步幅(padding和strides) 与卷积层一样池化层也可以改变输出形状我们可以通过填充和步幅以获得所需的输出形状。下面我们用深度学习框架中内置的二维最大池化层来演示池化层中填充和步幅的使用。我们首先构造了一个输入张量X它有四个维度其中样本数和通道数都是1。
X torch.arange(16, dtypetorch.float32).reshape((1, 1, 4, 4)) # (样本数, 通道数, 高, 宽)
print(X)
tensor([[[[ 0., 1., 2., 3.],[ 4., 5., 6., 7.],[ 8., 9., 10., 11.],[12., 13., 14., 15.]]]]) 默认情况下深度学习框架中的步幅与池化窗口的大小相同。因此如果我们使用形状为(3, 3)的汇聚窗口那么默认情况下我们得到的步幅形状为(3, 3)。
pool2d nn.MaxPool2d(3) # 使用形状为(3, 3)的池化窗口于是默认使用步幅形状为(3, 3)
pool2d(X)
tensor([[[[10.]]]]) 填充和步幅可以手动设定。
pool2d nn.MaxPool2d(3, padding1, stride2)
pool2d(X)
tensor([[[[ 5., 7.],[13., 15.]]]]) 当然我们可以设定一个任意大小的矩形汇聚窗口并分别设定填充和步幅的高度和宽度。
pool2d nn.MaxPool2d((2, 3), stride(2, 3), padding(0, 1))
pool2d(X)
tensor([[[[ 5., 7.],[13., 15.]]]])
3、多个通道 在处理多通道输入数据时池化层在每个输入通道上单独运算而不是像卷积层一样在通道上对输入进行汇总。这意味着池化层的输出通道数与输入通道数相同。下面我们将在通道维度上连结张量X和X 1以构建具有2个通道的输入。
X torch.cat((X, X 1), 1) # 在通道维度叠加因此是1
print(X)
print(X.shape)
tensor([[[[ 0., 1., 2., 3.],[ 4., 5., 6., 7.],[ 8., 9., 10., 11.],[12., 13., 14., 15.]],[[ 1., 2., 3., 4.],[ 5., 6., 7., 8.],[ 9., 10., 11., 12.],[13., 14., 15., 16.]]]])
torch.Size([1, 2, 4, 4]) 如下所示池化后输出通道的数量仍然是2。
pool2d nn.MaxPool2d(3, padding1, stride2)
print(pool2d(X))
print(X.shape)
tensor([[[[ 5., 7.],[13., 15.]],[[ 6., 8.],[14., 16.]]]])
torch.Size([1, 2, 4, 4])
4、总结
最大池化层会输出该窗口内的最大值平均池化层会输出该窗口内的平均值。池化层的主要优点之一是减轻卷积层对位置的过度敏感。我们可以指定池化层的填充和步幅。使用最大池化层以及大于1的步幅可减少空间维度如高度和宽度。池化层的输出通道数与输入通道数相同。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88257.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!