Keras 理解稠密层的参数单位和输入尺寸之间的差异

Keras 理解稠密层的参数单位和输入尺寸之间的差异,keras,Keras,假设我有一个大小为(1000,64)的数据集,其中64是列数(即特征)。在Keras中,假设我想构建一个NN模型,如下所示: 输入层:显然应该是一个层,其神经元数量等于我的数据集中的特征数量。因此,这里的神经元数量=64 隐藏层:我希望这个隐藏层有100个神经元 输出层:这是一个神经元,因为我正在处理一个二进制分类问题 现在,为了在Keras中构建上述架构,我通常会执行以下操作: model = Sequential() model.add(Dense(units=64, input_dim=6

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

  • 输入层:显然应该是一个层,其神经元数量等于我的数据集中的特征数量。因此,这里的神经元数量=64
  • 隐藏层:我希望这个隐藏层有100个神经元
  • 输出层:这是一个神经元,因为我正在处理一个二进制分类问题
  • 现在,为了在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()
    层(作为第一层(输入层))的
    units
    input\u dim
    参数。我确实理解
    input\u dim
    是为了指定数据集中的特征数量(在我的例子中为64),但我不理解
    单位在这里
    对于输入层的作用。
    单位是否应为64?换句话说,对于输入层,参数
    units
    应该是相同的
    input\u dim


    非常感谢。

    让我们先看一下图示

    就keras顺序模型符号而言,您将需要两个密集层(在图中标记为虚线框)

  • 密集层1:它应该有100个神经元,每个神经元接受64个特征作为输入,因此这个密集层的定义将是 密度(单位=100,输入尺寸=64)
  • 密集层2:这里需要一个神经元,它将上一个密集层的输出作为输入<密集层不需要代码>输入_dim
  • ,因为它连接到顺序模型中的前一个密集层,并且无论前一个密集层输出什么,它都作为输入(对于每个神经元)
    密度(单位=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
    

    你可以把
    密集(单位=m,输入=n)
    看作是一个层,层中有
    m
    神经元,每个神经元都有
    n
    输入。该层将输出
    m
    输出(每个神经元一个)

    明白了。温和而清晰的解释。非常感谢。如果有两个隐藏层(不包括输出层),第二个隐藏层是否为
    model.add(density(units=64,activation='tanh'))
    ?@EthanC,是的,正确,继续添加密集层,神经元数量为
    units
    。在最后一层,它将是
    1
    神经元和
    softmax
    对于多类或
    sigmoid
    对于二进制类一个有点极端的情况,如果我希望第二个隐藏层是200个神经元(同样,不包括输出层),理论上是可能的,不是吗?第二个隐藏层是
    模型吗(units=200,activation='tanh'))
    ?@EthanC。是的,从理论上讲,在一个层中有大量的神经元并没有错,而且200个神经元的代码片段是正确的。但是,增加宽度是否会增加模型的准确性,需要使用交叉验证进行检查。