【问题标题】:Units in Dense layer in KerasKeras 中密集层中的单元
【发布时间】:2019-05-24 21:36:31
【问题描述】:

我正在尝试理解 Keras 中 ANN 架构的概念。任何 NN 中的输入神经元数量应等于特征/属性/列的数量。因此,在矩阵为 (20000,100) 的情况下,我的输入形状应该有 100 个神经元。在 Keras 页面的示例中,我看到了一段代码:

model = Sequential([Dense(32, input_shape=(784,)),

,这几乎意味着输入形状有 784 列,而 32 是输出空间的维数,这意味着第二层将有 32 的输入。我的理解是,发生如此显着的下降是因为一些由于激活功能,单位未激活。我的理解正确吗?

同时,另一段代码显示输入神经元的数量高于特征数量:

model = Sequential()
model.add(Dense(64, activation='relu', input_dim=20))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

这个例子我不清楚。单位的大小怎么会大于输入维度的数量?

【问题讨论】:

  • Dense 层中的神经元总数是机器学习和数据科学界尚未达成一致的话题。有许多启发式方法可用于定义这一点,我建议您参阅 Cross Validated 上的这篇文章,其中提供了更多详细信息:stats.stackexchange.com/questions/181/…。总而言之,您指定的两种方法之间的隐藏单元数量很可能源自重复实验和反复试验,以实现最佳准确性。
  • @rayryeng 谢谢。我的观点不是如何选择单元/层数。我不明白:1)我的输入形状 784 是如何降级到 32 的; 2)为什么我的输入形状(第二个例子)小于单位数。
  • 我提到的答案是通过实验。 784 最有可能来自 MNIST 数据集,即 28 x 28 = 784 的图像。我已经看到神经网络的实现,其中隐藏层的 32 个神经元是好的。将每一层视为一个维度转换。即使你降到 32 维,也不一定意味着它会失去准确性。同样从低维空间到高维空间,如果您尝试将点映射到可能更容易分类的新空间,这很常见。这取决于。
  • @rayryeng。好的,总结一下:第一个示例中的 32 本质上是隐藏层 1 的大小,对吗?而且这个数字与输入层中有多少神经元无关,对吧?
  • 是的,没错。在 Keras 中,数字指定当前层有多少神经元。在底层,它计算出满足从前一层到当前层的前向传播的权重矩阵。在这种情况下,它将是 785 x 32,偏置单元有 1 个额外的神经元。

标签: python machine-learning keras deep-learning


【解决方案1】:

Dense 层中的神经元总数是机器学习和数据科学界尚未达成一致的话题。有许多启发式方法可用于定义这一点,我建议您参考 Cross Validated 上的这篇文章,其中提供了更多详细信息:https://stats.stackexchange.com/questions/181/how-to-choose-the-number-of-hidden-layers-and-nodes-in-a-feedforward-neural-netw

总而言之,您指定的两种方法之间的隐藏单元数量很可能源自重复实验和反复试验以达到最佳准确度。

但是,对于更多上下文,我提到的答案是通过实验来解决的。输入神经元的 784 很可能来自 MNIST 数据集,这些数据集是 28 x 28 = 784 的图像。我已经看到了神经网络的实现,其中隐藏层的 32 个神经元是好的。将每一层视为维度转换。即使你降到 32 维,也不一定意味着它会失去准确性。同样,从低维空间到高维空间,如果您尝试将点映射到可能更容易分类的新空间,这很常见。

最后,在 Keras 中,这个数字指定了当前层的神经元数量。在底层,它计算出满足从前一层到当前层的前向传播的权重矩阵。在这种情况下,它将是 785 x 32,偏置单元有 1 个额外的神经元。

【讨论】:

    【解决方案2】:

    神经网络基本上是矩阵乘法,您在第一部分中所说的下降不是由于激活函数,它只是因为矩阵乘法的性质而发生:

    这里的计算是:输入*权重=输出

    so -> [BATCHSIZE, 784] * [784, 32] = [BATCHSIZE, 32] -> 输出维度

    有了这个逻辑,我们可以很容易地解释我们如何获得一个输入形状

    -> [BATCHSIZE, 20] * [20, 64] = [BATCHSIZE, 64] -> 输出维度

    希望对你有所帮助!

    要了解更多信息:

    https://en.wikipedia.org/wiki/Matrix_multiplication

    【讨论】:

    • 如果不是因为AF,那他们是怎么想出32的?为什么不是 50?
    • 这是任意选择。隐藏层中的单元数是要调整的超参数,您可以使用 32 个单元以及 320 或 279 个。
    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2016-09-29
    • 2021-07-20
    • 2021-05-07
    • 2016-10-24
    • 2020-03-08
    相关资源
    最近更新 更多