【问题标题】:How come the dimensions of the first Dense layer do not have to equal the dimensions of Flatten() in CNNs?为什么第一个 Dense 层的尺寸不必等于 CNN 中 Flatten() 的尺寸?
【发布时间】:2019-08-31 18:38:59
【问题描述】:

根据我对 CNN 的理解,Flatten 用于从 2D 到 1D,以便您可以使用 Dense 层来执行分类。同样在我的理解中,扁平化会导致过滤器的尺寸乘以过滤器的数量。

为什么在展平后,第一个 Dense 层不必具有与展平结果相同的尺寸(这将是滤镜 * 滤镜的暗淡)?第一个 Dense 层的节点比 flatten 的 dims 少或多的 CNN 都可以,但我不知道为什么。扁平化不应该为您提供密集层的输入吗?

【问题讨论】:

  • 你能分享一个你在说什么的例子吗?在我看来,您似乎对 Flatten 的工作原理有很多误解

标签: neural-network conv-neural-network


【解决方案1】:

Flatten 确实将您的输出扁平化为一维。

但是,它输入的密集层可以是任意大小。密集层中的神经元数量不取决于它们接收的输入数量。这是传统神经网络(多层感知器)的一个特性,与之前的卷积操作或层无关。

网络的全连接部分的设计,即密集层所在的位置,没有一个确定的解决方案,但是可以遵循rules-of-thumb

【讨论】:

  • 感谢您的回答。但是为什么第一个密集层中的神经元数量不取决于它接收的输入数量呢?我现在意识到我通常可能误解了 ANN 的一个关键部分,但我认为每个输入值都被用作一个输入节点的激活值,这意味着每个输入值都需要一个节点。
  • 神经元不依赖于输入,因为输入没有与神经元一一对应。每个输入可以到达第一层的许多神经元(一对多)。
  • 好的,太好了。那么输入到底是如何映射到第一层的节点的呢?所有输入都到每个节点吗?然后每个节点将它们的输入相加并将总输入放入激活函数以确定其输出?为什么这个过程从未在任何教程中显示(至少我见过)?你知道解释这个过程的任何好的博客/资源吗?
  • 通常,每个输入都映射到第一层中的每个神经元——在我设计的任何网络中,情况都是如此。每个神经元的值是所有输入的总和乘以它们各自的权重,再加上一个偏差。然后这个值被一个激活函数压缩以确定该神经元的输出。这个问题与原始问题不同,所以如果您有更具体的问题,我建议您发布另一个问题。您能否选择此问题作为已回答。
猜你喜欢
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2022-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多