【问题标题】:Difference between Dense and Activation layer in KerasKeras 中 Dense 和 Activation 层的区别
【发布时间】:2016-11-29 12:37:32
【问题描述】:

我想知道 Keras 中的激活层和密集层有什么区别。

由于 Activation Layer 似乎是一个全连接层,而 Dense 有一个参数来传递一个激活函数,那么最佳实践是什么?

让我们想象一个像这样的虚构网络: 输入 -> 密集 -> 辍学 -> 最终层 最终层应该是: Dense(activation=softmax) 还是 Activation(softmax) ? 什么是最干净的,为什么?

谢谢大家!

【问题讨论】:

    标签: python machine-learning neural-network deep-learning keras


    【解决方案1】:

    使用Dense(activation=softmax) 在计算上等同于先添加Dense,然后再添加Activation(softmax)。但是,第二种方法有一个优点 - 您可以从此类定义的模型中检索最后一层(激活之前)的输出。在第一种方法中 - 这是不可能的。

    【讨论】:

    • 你能看出使用第一个有什么好处吗?
    • 模型定义更短更紧凑。
    • 所以在 Keras 中,如果我必须在 20 个类上微调 InceptionV3 网络,我是否采用 base_model.output 其中 base_model 为 InceptionV3(),然后添加 Dense(1024,activation+"relu ")(base_model.output 后​​跟 Dense(20, activation='softmax')?这是在 Keras 中正确的做法吗?
    • 是的,来自 Keras 文档 (keras.io/activations),它是等价的
    【解决方案2】:

    正如@MarcinMożejko 所说,它是等价的。我只是想解释一下为什么。如果你看一下DenseKeras documentation page,你会看到默认的激活函数是None

    一个密集层在数学上是:

    a = g(W.T*a_prev+b)
    

    其中g 是一个激活函数。使用Dense(units=k, activation=softmax) 时,它会一次性计算所有数量。当做Dense(units=k)然后Activation('softmax)时,它首先计算数量W.T*a_prev+b(因为默认的激活函数是None)然后将指定为Activation层输入的激活函数应用到计算数量。

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2019-02-04
      • 2019-01-08
      • 2019-08-19
      相关资源
      最近更新 更多