深度学习 – CNN中卷积层、池化层、全连接层的输出参数大小的计算
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:深度学习 – CNN中卷积层、池化层、全连接层的输出参数大小的计算
原文链接:https://www.stubbornhuang.com/2160/
发布于:2022年06月09日 14:11:19
修改于:2022年06月18日 9:07:32
CNN(Convolutional Neural Networks,卷积神经网络),CNN在图像、提取空间信息中有着广泛的应用,CNN通常包含以下几种神经层:
- 卷积层 Convolutional layer
- 池化层 Pooling layer
- 全连接层 Fully-Connected layer
- 线性整流层 Rectified Liner Units layer
一般通过堆叠上述神经层组成CNN网络,在本文中将以清晰的示例说明如何计算不同神经层的输出参数大小。
本文将以最简单的猫狗图片分类作为说明示例,假设有一张有RGB 3个颜色通道,宽32,高32的图片,我们通过将其输入到CNN中对该图片进行分类,判断是猫还是狗。
1 卷积层的输出
卷积层是构成CNN网络的核心,其基本上完成了大量繁重的计算工作。一般有以下参数影响卷积层的输出:
- filter num:卷积核的数量
- filter size:卷积核的大小
- stride:卷积的步长
- padding:卷积的填充
对于卷积层的计算,假设卷积层输入为W_{input}\times H_{input} \times D_{input},其中W_{input}为输入的宽度,H_{input}为输入的高度,D_{input}为输入的维度(通道数),经过卷积核数量为K,卷积核大小为F,卷积步长为S,卷积填充为P的卷积层,则该卷积层的输出为,
在没有padding的情况下
W_{output} = \frac{W_{input}-F}{S} + 1\\
H_{output} = \frac{H_{input}-F}{S} + 1\\
D_{output} = K
\end{array}
在有padding的情况下
W_{output} = \frac{W_{input}-F+2P}{S} + 1\\
H_{output} = \frac{H_{input}-F+2P}{S} + 1\\
D_{output} = K
\end{array}
假设CNN输入图片的维度为3\times 32\times 32,其中通道数为3,宽为32,高为32,假设CNN第一个卷积层卷积核数量为10,卷积核大小为3\times 3,卷积步长为2,卷积填充为0,则该卷积层输出大小为
W = \frac{32-3+0}{2} + 1 = 15\\
H = \frac{32-3+0}{2} + 1 = 15\\
D = 10
\end{array}
2 池化层的输出
增加池化层的目的主要是下采样(downsamples)。
在CNN中,在连续的卷积层中增加一个池化层可以逐渐减小表示的空间大小,从而减少网络中参数数量和计算量,并且能够在一定程度上防止过拟合。
最常见的池化层规模为2 \times 2,在输入的每个深度切片沿宽度和高度进行下采样。
在进行池化时,通常不使用任何填充,所以padding通常为0。
对于池化层的计算,假设输入层为W_{input}\times H_{input} \times D_{input},其中W_{input}为输入的宽度,H_{input}为输入的高度,D_{input}为输入的维度(通道数),经过过滤器数量为K,池化大小为F,步长为S的池化层,则该池化层的输出为,
W_{output} = \frac{W_{input}-F}{S} + 1\\
H_{output} = \frac{H_{input}-F}{S} + 1\\
D_{output} = K
\end{array}
假设输入为15\times 15\times 10,使用过滤器数量为10,池化大小为2 \times 2,步长为2的池化层进行池化处理,则输出的大小为
W = \frac{15-2}{2} + 1 = 7\\
H = \frac{15-2}{2} + 1 = 7\\
D = 10
\end{array}
3 全连接层的输出
全连接层主要是将输入的tensor进行展平。
对于全连接层的计算,假设输入层为W_{input}\times H_{input} \times D_{input},其中W_{input}为输入的宽度,H_{input}为输入的高度,D_{input}为输入的维度(通道数),经过全连接层的输出为
outputsize = W_{input}\times H_{input}\times D_{input}
\end{array}
假设输入为7\times 7\times 10,则输出为
outputsize = 7 \times 7\times 10 = 490
\end{array}
在经过全连接层处理之后,490个数字可以组成一个长向量,然后将其输入到Softmax
中对分类进行预测。
参考链接
当前分类随机文章推荐
- 深度学习 - 数据集中训练集、验证集、测试集的划分以及各自作用 阅读2513次,点赞1次
- 深度学习 - 语音识别框架wenet的非流式与流式混合训练机制 阅读1258次,点赞0次
- 深度学习 - 通俗理解Beam Search Algorithm算法 阅读819次,点赞0次
- 深度学习 - Python实现CTC Decode解码算法Greedy Search Decode,Beam Search Decode,Prefix Beam Search Decode 阅读1510次,点赞0次
- 深度学习 - 深度学习中的多维数据存储方式NCHW和NHWC 阅读1398次,点赞0次
- 深度学习 - 理解LSTM网络[翻译] 阅读361次,点赞0次
- 深度学习 - NLP自然语言处理与语音识别中常用的标识符
阅读986次,点赞0次等的含义 - 深度学习 - 从矩阵运算的角度理解Transformer中的self-attention自注意力机制 阅读1142次,点赞0次
- 深度学习 - 经典的卷积神经网络(CNN)模型结构 阅读531次,点赞0次
- 深度学习 - 为什么要初始化网络模型权重? 阅读474次,点赞0次
全站随机文章推荐
- 资源分享 - Texturing and Modeling - A Procedural Approach, Third Edition 英文高清PDF下载 阅读2060次,点赞0次
- 资源分享 - PHP与MySQL程序设计(第3版) 中文 PDF下载 阅读2114次,点赞0次
- Pytorch - 使用pytorch自带的Resnet作为网络的backbone 阅读378次,点赞0次
- Python - glob模块详解以及glob.glob、glob.iglob函数的使用 阅读1107次,点赞0次
- Pytorch - torch.cat参数详解与使用 阅读1455次,点赞1次
- Windows平台录音类封装:AudioRecordWindows 阅读3956次,点赞0次
- 资源分享 - Learning Vulkan 英文高清PDF下载 阅读2170次,点赞0次
- 资源分享 - Python3网络爬虫开发实战 崔庆才著 高清PDF下载 阅读3676次,点赞0次
- 我的项目 - Windows/Linux动态库加载类 阅读3283次,点赞0次
- 资源分享 - Game Physics (First Edition) 英文高清PDF下载 阅读1612次,点赞0次
评论
169