【问题标题】:implementation difference between ReLU and LeakyReluReLU 和 LeakyRelu 的实现区别
【发布时间】:2018-11-08 09:45:48
【问题描述】:

我知道这些激活的定义不同,但是,在阅读 ReLU's documentation 时,它会将参数 alpha 作为输入,默认为 0,并说

relu

relu(x, alpha=0.0, max_value=None) 整流线性单元。

参数

x:输入张量。 alpha:负部分的斜率。默认为零。 max_value:输出的最大值。返回

(泄漏的)整流线性单元激活:x if x > 0, alpha * x if x

还有一个带有similar documentation 的 LeakyReLU,但作为其他模块的一部分(高级激活)

它们之间有区别吗?我应该如何导入 relu 来用 alpha 实例化它?

from keras.layers.advanced_activations import LeakyReLU
..
..
model.add(Dense(512, 512, activation='linear')) 
model.add(LeakyReLU(alpha=.001)) # using Relu insted of LeakyRelu

请注意,当使用 LeakyReLU 时,我收到以下错误:

AttributeError: 'LeakyReLU' object has no attribute '__name__'

但是当我改用 ReLU 时,它可以工作:

model.add(Activation('relu')) # This works correctly but can't set alpha

总结一下:什么是差异以及如何导入 ReLU 以将 aplha 传递给它?

【问题讨论】:

  • 你能发布错误的跟踪吗?我无法从模型 sn-p 重现它,LeakyReLU 工作正常。
  • 抱歉,我没有发布漏洞错误,因为我的目标是了解这些实现之间的差异,并且我想使用 alpha 参数调用 ReLU,即使我可以因为错误而调用 LeakyReLU (我的意思是,这个错误是避免使用 LeakyReLU 的动机)。使用 DeadReluDetector 时会出现错误,但它可能是此模块的错误(我应该对此进行更多调查)

标签: python keras


【解决方案1】:

就实现而言,它们call 具有相同的后端功能K.relu。不同之处在于relu 是一个激活函数,而 LeakyReLU 是在keras.layers 下定义的Layer。所以区别在于你如何使用它们。对于激活函数,您需要环绕或使用内部层,例如Activation,但 LeakyReLU 为您提供了一个带有 alpha 值的函数的快捷方式。

【讨论】:

  • 感谢您的回答,确实很清楚,但是我应该如何导入/使用 ReLU 来设置 alpha 值?
  • 使用 LeakyReLU 作为层,它为你包装了 relu 函数。正如我评论的那样,我无法重现您的错误。你的用法是正确的。
  • 是的,错误在另一个模块中(DeadReluDetector,来自contrib)所以我不确定错误在哪里,但此刻我不在乎,我只想使用 ReLU while设置 alpha 值
  • 另请注意,在密集层或其他东西中使用标准“relu”激活时,alpha 保持在 0 并且不是“可训练”/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2016-04-18
  • 1970-01-01
  • 2011-07-04
  • 2017-04-05
  • 1970-01-01
相关资源
最近更新 更多