python - 为什么 TensorFlow 使用 `None` 作为默认激活?
问题描述
在 TensorFlow Python API 中,activation
kwarg的默认值tf.layers.dense
是None
,然后在文档中它说:
激活:要使用的激活函数。如果您不指定任何内容,则不会应用任何激活(即“线性”激活:a(x) = x)。
为什么在定义函数时不直接使用标识函数作为默认值?像这样:
def dense(..., activation=lambda x: x, ...):
pass
这样您就不必担心文档和代码之间的不一致。
这(使用 None 表示默认函数)只是一种编码风格,还是使用函数作为 kw 参数的默认值有一些警告?
它不是为了避免不必要的函数调用,因为身份函数仍然被创建和调用,甚至None
被传递给activation
. 此外,由于这发生在图构建时,因此没有必要进行这样的优化——假设这确实是一种优化。
更正:
正如@y-luo 所指出的,该tf
实现实际上并没有创建一个身份函数。但tf.keras
实施确实如此。
解决方案
我认为实际上没有身份功能或任何功能。例如:_
class Dense(base.Layer):
...
def call(self, inputs):
...
if self.activation is not None:
return self.activation(outputs) # pylint: disable=not-callable
return outputs
正如你所看到的,None
激活实际上是正确的,因为它是一个条件而不是一个真正的函数。它仅相当于“线性”激活:a(x) = x
推荐阅读
- wordpress - 使用 Elementor,如何在其他元素周围环绕文本?
- python - python logging - 特定功能的不同级别
- performance - 分页性能
- robot - 如何让机器人辣椒始终保持在一个位置或姿势?
- javascript - Google Save To Drive API v3 停止工作
- javascript - 构建随机团队生成器的最佳方法
- ios - 如何使 SwiftUI 画布预览水平
- javascript - 如果孩子有一个活动班级,请在锚标记之前添加班级
- laravel - 使用数据向 Livewire 发送 js 事件
- c - 在一个代码中抛出函数“getline”警告的隐式声明,但在另一个代码中没有