转载:cnn学习之卷积或者池化后输出的map的size计算

本文详细介绍了在卷积神经网络(CNN)中,如何计算卷积层或池化层输出特征图的尺寸。包括不同填充方式对输出尺寸的影响及主流框架如TensorFlow的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:cnn学习之卷积或者池化后输出的map的size计算

相信各位在学习cnn的时候,常常对于卷积或者池化后所得map的的大小具体是多少,不知道怎么算。尤其涉及到边界的时候。
 
首先需要了解对于一个输入的input_height*input_widtht的图像,在卷积或者池化的时候,经常需要加padding,这是为了处理边界问题时而采用的一种方式,于是原输入就变成了下图所示:
 
对于输出的size计算 如下图:
out_height=((input_height - filter_height + padding_top+padding_bottom)/stride_height  )+1
out_width=((input_width - filter_width + padding_left+padding_right)/stride_width )+1
 
只不过往往
out_height=out_width ,
input_height = input_width   
fillter_height=filter_width  padding_top=padding_bottom=padding_left=padding_right  
stride_width=stride_height罢了
 
 
此外对于当前主流的cnn框架
 
tensorflow中是如此计算的:
首先对于padding有两个默认的选项same和valid ,如果是valid的话,则padding的四个值均为0,也就是没有padding
对于same,计算方式如下图,图中out的值可以直接计算出来的原因是因为padding的值是一个根据输入的定值的;大家把pad_along_height的等式转化成,左边是out_height,右边是其他的形式。就一样了。
 
 
其他的框架,比如caffe,应该都是自己设置padding的值大小。
 
至于padding出来的区域的值,一般填0。或者复制边界的值等等。
posted @ 2018-05-09 14:25 佟学强 阅读( ...) 评论( ...) 编辑 收藏
### 卷积神经网络中卷积层和池化层的工作机制 #### 卷积层的操作原理 卷积层的核心功能是从输入数据中提取局部特征。这一过程主要依赖于滤波器(也称为核,Kernel)与输入数据之间的卷积运算。具体而言,滤波器是一个小型矩阵,在输入数据上以滑动窗口的形式移动,并在每个位置执行逐元素乘法后再求和得到输出值[^1]。 这种操作可以被描述为以下步骤: - 输入图像或前一层的激活图作为基础。 - 使用多个可训练的小型滤波器扫描整个输入区域。 - 每次应用滤波器时,都会生成一个新的数值,这些数值共同构成一个特征映射(Feature Map),用于表示特定类型的模式或结构。 通过这种方式,卷积层能够在不同尺度下捕获诸如边缘、角点以及更复杂的形状等特征[^3]。 #### 池化层的作用机理 池化层的主要目的是减少特征地图的空间尺寸,从而降低模型复杂度并提高计算效率的同时保留重要信息。最常用的两种池化方法分别是最大池化(Max Pooling) 和平均池化(Average Pooling)[^2]: - **最大池化**选取非重叠子区域内最大的响应值作为代表; - **平均池化**则取该范围内所有单元格值得均值。 这两种策略都能有效压缩数据量级而不丢失关键属性,同时还赋予了网络一定程度上的平移不变性——即使对象稍微位移也不会影响最终判断结果[^1]。 ```python import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() # 定义卷积层 self.conv_layer = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=(3, 3), stride=1, padding='same') # 定义池化层 self.pool_layer = nn.MaxPool2d(kernel_size=(2, 2)) def forward(self, x): # 应用卷积操作 conv_output = self.conv_layer(x) # 对卷积后的输出施加ReLU激活函数 relu_output = nn.ReLU()(conv_output) # 进行池化降维 pooled_output = self.pool_layer(relu_output) return pooled_output ``` 以上代码片段展示了一个简单的两步流程:先经过一次标准二维卷积变换增加通道数至64个新特性维度;接着利用大小为\(2 \times 2\)的最大池化进一步简化表达形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佟学强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值