• 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

深度学习 – CNN中卷积层、池化层、全连接层的输出参数大小的计算

深度学习 发布于2022-06-09 阅读 2,799次 0次评论 1次点赞 本文共2170个字,阅读需要6分钟。

CNN(Convolutional Neural Networks,卷积神经网络),CNN在图像、提取空间信息中有着广泛的应用,CNN通常包含以下几种神经层:

一般通过堆叠上述神经层组成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的情况下

\begin{array}{c}
W_{output} = \frac{W_{input}-F}{S} + 1\\
H_{output} = \frac{H_{input}-F}{S} + 1\\
D_{output} = K
\end{array}

在有padding的情况下

\begin{array}{c}
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,则该卷积层输出大小

\begin{array}{c}
W = \frac{32-3+0}{2} + 1 = 15\\
H = \frac{32-3+0}{2} + 1 = 15\\
D = 10
\end{array}
深度学习 - CNN中卷积层、池化层、全连接层的输出参数大小的计算-第0张图片

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的池化层,则该池化层的输出为,

\begin{array}{c}
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的池化层进行池化处理,则输出的大小为

\begin{array}{c}
W = \frac{15-2}{2} + 1 = 7\\
H = \frac{15-2}{2} + 1 = 7\\
D = 10
\end{array}
深度学习 - CNN中卷积层、池化层、全连接层的输出参数大小的计算-第1张图片

3 全连接层的输出

全连接层主要是将输入的tensor进行展平。

对于全连接层的计算,假设输入层为W_{input}\times H_{input} \times D_{input},其中W_{input}为输入的宽度,H_{input}为输入的高度,D_{input}为输入的维度(通道数),经过全连接层的输出为

\begin{array}{c}
outputsize = W_{input}\times H_{input}\times D_{input}
\end{array}

假设输入为7\times 7\times 10,则输出为

\begin{array}{c}
outputsize = 7 \times 7\times 10 = 490
\end{array}
深度学习 - CNN中卷积层、池化层、全连接层的输出参数大小的计算-第2张图片

在经过全连接层处理之后,490个数字可以组成一个长向量,然后将其输入到Softmax中对分类进行预测。

参考链接

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:深度学习 – CNN中卷积层、池化层、全连接层的输出参数大小的计算

原文链接:https://www.stubbornhuang.com/2160/

发布于:2022年06月09日 14:11:19

修改于:2023年06月26日 20:07:12

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
Modern OpenGL - 与着色器Shader相关的API函数总结以及如何创建、编译与使用Shader
OpenGL可编程渲染管线
下一篇
Python - 解决opencv-python使用cv2.imread()读取中文路径图片失败的问题
OpenCV
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号