【问题标题】:Understanding the difference between the arguments units and input_dim for Dense layer了解 Dense 层的参数单位和 input_dim 之间的区别
【发布时间】:2019-10-20 14:36:30
【问题描述】:

假设我有一个大小为 (1000, 64) 的数据集,其中 64 是列数(即特征)。在 Keras 中,假设我想构建一个 NN 模型,架构如下:

  1. 输入层:显然应该是一个神经元数量等于我数据集中特征数量的层。因此,这里的神经元数量 = 64。
  2. 隐藏层:我希望这个隐藏层有 100 个神经元。
  3. 输出层:这是一个神经元,因为我正在处理二进制分类问题。

现在,要在 Keras 中构建上述架构,我通常会执行以下操作:

model = Sequential()
model.add(Dense(units=64, input_dim=64, activation='tanh'))  # Input layer
model.add(Dense(units=100, activation='tanh'))  # Hidden layer
model.add(Dense(units=1, activation='sigmoid')) # Output layer

问题是我无法区分Dense() 层的参数unitsinput_dim(对于作为第一层(输入层)的角色)。我明白input_dim 是为了指定数据集中的特征数量(在我的情况下= 64),但我不明白units 在这里的作用对于输入层强>。 units 应该是 64 岁吗?换句话说,参数units 是否应该与输入层的input_dim 相同?

非常感谢。

【问题讨论】:

    标签: keras


    【解决方案1】:

    让我们先看图示

    在 keras 序列模型符号方面,您将需要两个 Dense 层(在图中标记为虚线框)

    1. 密集层 1:它应该有 100 个神经元,每个神经元将 64 个特征作为输入,所以这个密集层的定义是 Dense(units=100, input_dim=64)
    2. Dense Layer 2:您需要一个神经元,它将前一个密集层的输出作为输入。密集层不需要input_dim,因为它连接到顺序模型中的前一个密集层,并且无论之前的密集层输出什么,它都将其作为输入(对于每个神经元) Dense(units=1)

    所以模型将是:

    model = Sequential()
    model.add(Dense(units=100, input_dim=64, activation='tanh'))  # First Hidden layer
    model.add(Dense(units=1, activation='sigmoid')) # Output layer
    

    您可以将Dense(units=m, input_dim=n) 视为具有m 神经元的层,每个神经元都有n 输入。该层将输出m 输出(每个神经元一个)。

    【讨论】:

    • 知道了。温和而清晰的解释。非常感谢。
    • 如果有两个隐藏层(不包括输出层),第二个隐藏层是model.add(Dense(units=64,activation='tanh'))吗?
    • @EthanC,是的,正确的只是继续添加密集层,units 作为神经元的数量。在最后一层,它将是1 神经元,softmax 用于多类或sigmoid 用于二进制类
    • 有点极端的情况,如果我希望第二个隐藏层是 200 个神经元(同样,不包括输出层),理论上是有可能的,不是吗?,第二个隐藏层会是model.add(Dense(units=200,activation='tanh'))?
    • @EthanC。是的,理论上一层中拥有大量神经元并没有错,而且 200 个神经元的代码 sn-p 也是正确的。但是,增加广度是否会提高模型的准确性是您必须使用交叉验证来检查的事情。
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 2022-01-24
    • 2023-01-02
    • 2019-10-30
    • 2011-10-26
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多