为什么TensorFlow使用“None”作为默认激活?

时间:2018-05-24 05:43:00

标签: python tensorflow default

在TensorFlow Python API中,activation的{​​{1}} kwarg的默认值为tf.layers.dense,然后在文档中说明:

  

激活:要使用的激活功能。如果您没有指定任何内容,则不会应用任何激活(即"线性"激活:a(x)= x)。

为什么不在定义函数时使用identity函数作为默认值?像这样:

None

这样您就不必担心文档和代码之间的不一致。

这是(使用None来表示默认函数)只是一种编码风格,还是有一些警告使用函数作为kw参数的默认值?

它不存在避免不必要的函数调用,因为仍然创建了一个身份函数,并且甚至将def dense(..., activation=lambda x: x, ...): pass 调用传递给None。此外,由于这是在图形构建时发生的,所以没有必要像这样进行优化 - 假设这确实是一种优化。

校正:

正如@ y-luo指出的那样,activation实现并没有真正创建一个身份功能。但是tf实现确实如此。

1 个答案:

答案 0 :(得分:1)

我认为实际上没有身份功能或任何功能。对于example

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