【问题标题】:What is difference between 'call' and '__call__' in TensorFlow BasicLSTMCell implementation?TensorFlow BasicLSTMCell 实现中的“call”和“__call__”有什么区别?
【发布时间】:2018-06-22 14:13:33
【问题描述】:

我正在学习Tensorflow BasicLSTMCell,同时我发现类中有两个类似的方法:__call__call。这两种方法具有相同的参数,文档没有说明区别。参考source code 并没有给我任何线索。但我猜__call__ 方法是从某处继承的,而call 会覆盖__call__。如果是这样,为什么不在源代码中直接使用__call__ 而不是call

【问题讨论】:

    标签: tensorflow lstm rnn


    【解决方案1】:

    我在学习RNNCell时遇到了类似的问题。

    __call__ 包裹在 call 中的 base_layer.py 中的 Layer 类中,“应用预和后处理步骤”。

    【讨论】:

      【解决方案2】:

      __call__() 方法不会构建模型。它只是在模型中执行前向传递。当您使用call() 时,它会构建模型。当您致电model.summary() 时,您可以看到不同之处。第一种方法会给出 ValueError ,而后一种方法可以正常工作。

      还有另一种方法称为build()。最佳实践是在此方法中声明tf.Variables()(当您了解输入形状时)而不是__init__() 方法。此方法稍后会构建模型。

      结论:如果您使用call(),它将与__call__ 一样工作,此外,它还将构建模型。但是如果你真的想使用后者,也可以同时声明build()

      【讨论】:

        猜你喜欢
        • 2012-03-28
        • 2018-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 2016-03-27
        相关资源
        最近更新 更多