教你如何记住卷积后图像大小的公式

本文通过实例解析了卷积神经网络中输出图像尺寸的计算公式。以3x3输入图像为例,介绍了通过padding、步长及核大小计算输出尺寸的过程。

假设输入图像的尺寸为i x i,输出图像尺寸为 o x o, 步长stride为s, 某一边的padding为p,kernal的大小为k x k,则公式为:
在这里插入图片描述
如何快速记住这个公式呢?
在这里插入图片描述
如上图画了一个实例,输入图像大小为3 x 3, i = 3; p = 1; s = 1; k = 3.
3 x 3的图像经过padding以后变为5 x 5,即i + 2p。而 i + 2p - k 的含义则是图中的蓝色kernal有几个像素可以走,每一步的步长是s,(i + 2p - k) / s 的意思显然就是蓝色kernal向右还能走几步!,(i + 2p - k) / s + 1则表示再加上现在蓝色kernal所在位置,得到卷积操作的总次数,也就是输出图像的大小

理解了上面这个过程,就能记住这个公式啦!

### 转置卷积输出尺寸计算方法 在卷积神经网络中,转置卷积(也称为反卷积)是一种重要的操作,其核心目标之一是对输入特征图进行上采样。为了保持清晰性和准确性,在讨论转置卷积的输出尺寸时,需考虑多个参数的影响。 #### 参数定义 以下是影响转置卷积输出尺寸的主要参数: - 输入张量大小 \(H_{in} \times W_{in}\),即高度和宽度。 - 卷积大小 \(k\)。 - 步幅 \(s\)。 - 填充 \(p\)。 - 扩展填充 \(d\)(用于扩张卷积的情况)。 对于标准的转置卷积,输出尺寸可以通过以下公式计算: \[ H_{out} = (H_{in} - 1) \cdot s - 2 \cdot p + d \cdot (k - 1) + o_p + 1 \] 其中 \(o_p\) 是额外的输出填充项,通常用来微调最终输出的高度或宽度[^1]。 #### 数学推导过程 该公式的推导基于矩阵乘法以及卷积运算的本质特性。具体来说,转置卷积可以看作是传统卷积的一个逆向映射关系。如果希望保留原始输入的空间维度不变,则需要特别设置步幅、填充和其他超参数来满足这一条件[^3]。 另外值得注意的是,“真实”的卷积模式下权重会被翻转后再参与乘法运算;然而这种行为并不适用于转置卷积场景之中[^2]。 ```python def calculate_transpose_conv_output_size(input_height, input_width, kernel_size=3, stride=1, padding=0, dilation=1, output_padding=0): """ Calculate the output dimensions after applying Transposed Convolution. Parameters: input_height : int Height of the input tensor. input_width : int Width of the input tensor. kernel_size : int or tuple Size of the convolving kernel. stride : int or tuple Stride of the convolution operation. padding : int or tuple Zero-padding added to both sides of the input. dilation : int or tuple Spacing between kernel elements. output_padding : int or tuple Additional size added to one side of each dimension in the output shape. Returns: Tuple[int,int] Output height and width as integers. """ h_out = ((input_height - 1) * stride - 2 * padding + dilation * (kernel_size - 1) + output_padding + 1) w_out = ((input_width - 1) * stride - 2 * padding + dilation * (kernel_size - 1) + output_padding + 1) return h_out, w_out # Example Usage height_in, width_in = 7, 7 stride_val = 2 padding_val = 1 output_padding_val = 1 kernel_val = 4 print(calculate_transpose_conv_output_size(height_in, width_in, kernel_size=kernel_val, stride=stride_val, padding=padding_val, output_padding=output_padding_val)) ``` 上述代码片段展示了如何利用给定参数实现自动化的输出尺寸预测功能。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值