feature map大小计算方法

本文详细介绍了卷积神经网络中特征图尺寸变化的计算方法,包括卷积层、池化层对图像尺寸的影响,并给出了具体的计算公式及示例。此外,还介绍了反卷积(deconvolution)的基本原理及其计算公式。

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

(1)边长的计算公式是: 
output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1

输入图片大小为200×200,依次经过一层卷积(kernel size 5×5,padding 1,stride 2),pooling(kernel size 3×3,padding 0,stride 1),又一层卷积(kernel size 3×3,padding 1,stride 1)之后,输出特征图大小为:

(200-5+2*1)/2+1 为99.5,取99

(99-3)/1+1 为97

(97-3+2*1)/1+1 为97

研究过网络的话看到stride为1的时候,当kernel为 3 padding为1或者kernel为5 padding为2 一看就是卷积前后尺寸不变(卷积向下取整,池化向上取整)。

 

(2)如果是反卷积(deconvolution)

输入:2x2, 卷积核:4x4, 滑动步长:3, 输出:7x7

公式:2x4-(4-3)x(2-1)=8-1=7

        output_w= input_w*kernerl_size - (kernel_size - stride)*(input_w - 1)

或者:  (2 - 1) * 3 + 4 = 7

         output = (input_w - 1) * stride + kernel_size

图像的deconvolution过程如下,

(参考文章:http://blog.youkuaiyun.com/fate_fjh/article/details/52882134)

 

### 计算多层CNN每层输出的Feature Map大小 对于卷积神经网络(CNN),计算各层输出的特征图(feature map)尺寸是一个重要环节。这不仅有助于理解模型的工作机制,还对优化网络设计至关重要。 #### 输出尺寸计算公式 给定输入图像尺寸 \(W \times H\) 和卷积核(kernel size) \(K\), 步幅(stride) \(S\), 填充(padding) \(P\) 的情况下,单个卷积操作后的输出尺寸可以通过以下公式得出: \[ W_{out} = \left( \frac{W - K + 2P}{S} \right)+1 \] 同样适用于高度方向: \[ H_{out} = \left(\frac{H-K+2P}{S}\right)+1 \][^1] 当涉及到多个连续的卷积层时, 需要逐层应用上述公式来确定最终输出尺寸。值得注意的是,在实际应用中,通常会采用相同的填充方式(same padding 或 valid padding),使得每次卷积之后的空间维度保持相对稳定或按预期缩小[^2]。 #### 实际案例分析 假设有一个初始输入图片大小为\(32\times32\)像素,并经过一系列不同配置下的卷积运算,则可以根据上面提到的方法逐步推导出各个阶段的具体数值变化情况。例如,如果使用了一个\(5×5\)的内核、步长设为1且无额外填充的情况下,那么第一次卷积后的输出将会变为\(28\times28\);继续以此类推直到最后一层完成全部变换过程为止[^3]。 ```python def calc_output_size(input_size, kernel_size=3, stride=1, padding=0): """ Calculate the output feature map size after convolution. Args: input_size (int): Input image width/height or previous layer's output dimension. kernel_size (int): Size of the convolving kernel/filter. stride (int): Stride length during convolution operation. padding (int): Number of zero-padding pixels added around borders. Returns: int: Output feature map dimensions post-convolution. """ return ((input_size - kernel_size + 2 * padding)//stride) + 1 # Example usage with multiple layers initial_input = 32 layers_configurations = [ {"kernel": 5, "stride": 1, "padding": 0}, {"kernel": 3, "stride": 2, "padding": 1} ] output_sizes = [] current_size = initial_input for config in layers_configurations: current_size = calc_output_size(current_size, **config) output_sizes.append(current_size) print(f"Output sizes across all specified layers are {output_sizes}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值