【神经网络】卷积层输出大小计算(长、宽、深度)

先定义几个参数

  • 输入图片大小 W×W
  • Filter大小 F×F
  • 步长 S
  • padding的像素数 P

于是我们可以得出

N = (W − F + 2P )/S+1

输出图片大小为 N×N


转载:

卷积中的特征图大小计算方式有两种,分别是‘VALID’和‘SAME’,卷积和池化都适用,除不尽的结果都向上取整

 

1.如果计算方式采用'VALID',则:

其中为输出特征图的大小,为输入特征图的大小,F为卷积核大小,stride为卷积步长。

2.如果计算方式采用'SAME',输出特征图的大小与输入特征图的大小保持不变,

其中padding为特征图填充的圈数。

若采用'SAME'方式,kernel_size=1时,padding=0;kernel_size=3时,padding=1;kernel_size=5时,padding=3,以此类推。


tensorflow代码(Tensorflow官方文档)中:

w_conv1=weight_variable([5,5,1,32]),一直不明白这个32是怎么来的,表示的是什么?
 
后来看到cs231n-知乎课程翻译的卷积神经网那一章的一段话:

参数共享:在卷积层中使用参数共享是用来控制参数的数量。就用上面的例子,在第一个卷积层就有55x55x96=290,400个神经元,每个有11x11x3=364个参数和1个偏差。将这些合起来就是290400x364=105,705,600个参数。单单第一层就有这么多参数,显然这个数目是非常大的。

作一个合理的假设:如果一个特征在计算某个空间位置(x,y)的时候有用,那么它在计算另一个不同位置(x2,y2)的时候也有用。基于这个假设,可以显著地减少参数数量。换言之,就是将深度维度上一个单独的2维切片看做深度切片(depth slice),比如一个数据体尺寸为[55x55x96]的就有96个深度切片,每个尺寸为[55x55]。在每个深度切片上的神经元都使用同样的权重和偏差。在这样的参数共享下,例子中的第一个卷积层就只有96个不同的权重集了,一个权重集对应一个深度切片,共有96x11x11x3=34,848个不同的权重,或34,944个参数(+96个偏差)。

可以看出,上面的32表示的是卷积层输出的深度,因为大家都明白width和height都可以通过公式计算得到,但是很多文献都没有告诉深度是如何得到的,下面是我的认识:

1. 因为这个深度是没有公式可以计算出来的,因为深度是一个经验值,如上面代码的32 ,其实是一个经验值,是通过调整参数发现32是一个最合适的值,可以得到最好的准确率,但是不同的图像的深度是不一样的。

2.这个深度表示用了多少个卷积核,下面这个图可以说明一下:

上图就可以很有效的说明 :卷积层输出的深度==卷积核的个数。

### 卷积神经网络卷积层计算公式 在卷积神经网络(Convolutional Neural Network, CNN)中,卷积层的核心功能是对输入数据应用一系列滤波器(即权重矩阵),从而提取局部特征。以下是关于卷积层输出尺寸公式的详细介绍。 #### 输出尺寸计算公式 对于一个二维卷积操作,假设输入张量的大小为 \(H \times W\)度和度),滤波器(kernel)的大小为 \(K_h \times K_w\) ,滑动步(stride)为 \(S_h \times S_w\) ,填充(padding)为 \(P_h \times P_w\) 。那么,经过卷积运算后的输出特征图尺寸可以由以下公式计算得出: \[ O_h = \left\lfloor \frac{H + 2P_h - K_h}{S_h} \right\rfloor + 1 \] \[ O_w = \left\lfloor \frac{W + 2P_w - K_w}{S_w} \right\rfloor + 1 \] 其中: - \(O_h\) 和 \(O_w\) 表示输出特征图的度和度; - \(P_h\) 和 \(P_w\) 是上下/左右方向上的零填充数量; - 当结果不是整数时,通常采用向下取整的方式[^1]。 #### 参数说明 - **权重 (Weight)** 权重是指用于卷积核中的可训练参数集合。这些参数在整个输入空间上共享,减少了模型复杂度并提了泛化能力[^2]。 - **滑动步 (Stride)** 步定义了卷积核每次移动的距离。较大的步会减小输出特征图的空间维度,而较小的步则保留更多细节信息。 - **填充 (Padding)** 填充是在输入边界周围添加额外像素的操作,目的是控制输出特征图的尺寸以及防止边缘信息丢失。常见的填充方式有 `valid`(无填充)和 `same`(保持输入与输出尺寸一致)。如果使用 `same` 填充,则满足条件: \[ P_h = \frac{(S_h - 1) \cdot H + K_h - S_h}{2}, \quad P_w = \frac{(S_w - 1) \cdot W + K_w - S_w}{2} \] #### 示例代码实现 下面是一个简单的 Python 实现来验证上述公式的结果: ```python def calculate_output_size(input_height, input_width, kernel_height, kernel_width, stride_height=1, stride_width=1, padding_height=0, padding_width=0): output_height = ((input_height + 2 * padding_height - kernel_height) // stride_height) + 1 output_width = ((input_width + 2 * padding_width - kernel_width) // stride_width) + 1 return output_height, output_width # 输入参数 input_height = 32 input_width = 32 kernel_height = 5 kernel_width = 5 stride_height = 1 stride_width = 1 padding_height = 2 padding_width = 2 output_height, output_width = calculate_output_size( input_height, input_width, kernel_height, kernel_width, stride_height, stride_width, padding_height, padding_width ) print(f"Output size: {output_height} x {output_width}") ``` 运行此代码将返回给定条件下卷积层输出尺寸。 ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值