了解 Dense 层的参数单位和 input_dim 之间的区别

Eth*_* C. 4 keras

假设我有一个大小为 (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
Run Code Online (Sandbox Code Playgroud)

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

非常感谢。

muj*_*iga 5

让我们先看一下图示

在此处输入图片说明

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

  1. 密集层 1:它应该有 100 个神经元,每个神经元将 64 个特征作为输入,因此这个密集层的定义将是 Dense(units=100, input_dim=64)
  2. 密集层 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
Run Code Online (Sandbox Code Playgroud)

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