当前位置: 首页 > news >正文

AI一点通:卷积神经网络的输出节点大小如何计算?全连接层必要输入大小如何设置

在使用卷积网络(CNN)时,一个步骤是计算经过卷积和池化步骤后的输出大小,以便我们可以将输出连接到一个完全收集的线性层。

以Pytorch中的一维CNN为例,

 self.conv1 = nn.Conv1d(in_channels=1, out_channels=64, kernel_size=3, padding=1)

重要的参数包括input_channels,这里我们设置为1,但它可以根据你拥有的特征数量而多于1。在二维图像案例中,输入通道可以是RGB,在一维数据案例中,可以是时间序列问题中的多个传感器测量值。output_channels由我们在卷积中使用的滤波器数量决定,在我们的例子中,我们将其设置为64,意味着我们正在使用64个滤波器。kernel_size是我们使用的卷积滤波器的大小。padding用于调整空间分辨率。

所以,这个一维卷积模块的总输出大小等于out_channels乘以每个滤波器的输出大小。计算每个滤波器确切输出大小的公式是:

在这里插入图片描述

从公式中,我们可以看到它受到许多因素的影响,包括每个通道(在我们的例子中是1个通道)的序列输入大小、核心大小、填充大小和步长大小(通常设置为1)。

卷积层中的填充

填充指的是在执行卷积操作之前向输入数据添加额外元素(通常是零)。
这样做是为了控制卷积层输出的大小。

填充的效果

填充的主要目的是允许控制输出张量的空间维度(在本例中为长度)。
通过填充,你可以保持输入的大小,增加它,或控制它减少的量。
特别是,填充可以用来确保层的输出大小与输入大小相同,这在许多CNN架构中很常见,以保持输入通过网络层的空间分辨率。

填充值为1

填充值为1意味着在输入的每一侧添加一个填充元素。
在一维卷积的背景下,这会在输入序列的开始和结束添加一个零值元素。
例如,如果你的输入序列是[a, b, c, d],在padding=1的情况下,它在卷积操作应用之前实际上变成了[0, a, b, c, d, 0]。

对输出大小的影响
当核心大小为3且填充为1(如你的例子所示)时,卷积层将产生一个与输入长度相同的输出。这是因为填充补偿了由于卷积操作而可能发生的尺寸减少。

使用上述公式,我们可以获得每个输入序列的输出大小。在我们的例子中,由于核心大小为3,将填充设置为1,将使每个输入序列的输出大小与输入大小相同,很简单。在Pytorch中,我们也可以设置padding=‘same’,它会自动调整填充大小,以确保每个输入序列的输出大小与输入大小相同。

在卷积步骤之后,然后是池化步骤,它可以是:

self.pool = nn.MaxPool1d(kernel_size = 2)

在这个例子中,我们基本上将卷积的输出大小减半。所以最终,每个输入序列将变成输入大小的一半。

现在要获得上述两个步骤的总输出大小,我们需要乘以我们使用的滤波器数量。在我们的例子中,我们使用了64个滤波器,所以最终的输出大小应该是:

64* (input_size//2 )

这个大小就是我们应该用来设置后续步骤中完全连接层的输入大小。

阅读原文

英文

AI好书推荐

AI日新月异,再不学来不及了。但是万丈高楼拔地起,离不开良好的基础。您是否有兴趣了解人工智能的原理和实践? 不要再观望! 我们关于 AI 原则和实践的书是任何想要深入了解 AI 世界的人的完美资源。 由该领域的领先专家撰写,这本综合指南涵盖了从机器学习的基础知识到构建智能系统的高级技术的所有内容。 无论您是初学者还是经验丰富的 AI 从业者,本书都能满足您的需求。 那为什么还要等呢?

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

相关文章:

  • 数据库知识点总结(一)
  • Go——二、变量和数据类型
  • C#面试题3
  • 马养殖场建设VR模拟实训教学平台具有灵活性和复用性
  • ES6 — ES14 新特性
  • Python算法——树的拓扑排序
  • python将模块进行打包
  • 主流开源大语言模型的微调方法
  • centeros7系统安装指定版本的mongodb数据库
  • 『Linux升级路』基础开发工具——gcc/g++篇
  • 【Python大数据笔记_day11_Hadoop进阶之MR和YARNZooKeeper】
  • 【docker】安装redis和mysql生产实战
  • 聚观早报 |一加12正式开启预订;OPPO Reno11系列卖点
  • 【中间件】服务化中间件理论intro
  • opencv-图像金字塔
  • 【译】JS基础算法脚本:字符串结尾
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 77. Combinations
  • angular2开源库收集
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Linux gpio口使用方法
  • Markdown 语法简单说明
  • vue2.0项目引入element-ui
  • Vue官网教程学习过程中值得记录的一些事情
  • 阿里云Kubernetes容器服务上体验Knative
  • 对象管理器(defineProperty)学习笔记
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 聊聊hikari连接池的leakDetectionThreshold
  • 山寨一个 Promise
  • 一个SAP顾问在美国的这些年
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #git 撤消对文件的更改
  • #ifdef 的技巧用法
  • $ git push -u origin master 推送到远程库出错
  • $GOPATH/go.mod exists but should not goland
  • (2)(2.10) LTM telemetry
  • (2)STL算法之元素计数
  • (2020)Java后端开发----(面试题和笔试题)
  • (8)STL算法之替换
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)ORM
  • .NET BackgroundWorker
  • .net core使用ef 6
  • .net framework profiles /.net framework 配置
  • .NET Framework与.NET Framework SDK有什么不同?