我正在研究Tensorflow BasicLSTMCell,但发现该类中有两种类似的方法:__call__
和call
。两种方法具有相同的参数,文档中没有说明不同之处。引用source code并没有给我任何线索。但是我猜想__call__
方法是从某个地方继承的,而call
会覆盖__call__
。如果是这种情况,为什么不直接在源代码中使用__call__
而不是call
?
答案 0 :(得分:1)
研究 RNNCell 时,我遇到了类似的问题。
__ call __ 包装在 base_layer.py 的类 Layer 中,“
call 和后处理步骤”。
答案 1 :(得分:1)
方法__call__()
不会建立模型。它只是在模型中执行前向传递。当您使用call()
时,它将构建模型。致电model.summary()
可以看到区别。第一个方法将给出ValueError,而第二个方法将正常工作。
还有另一种称为build()
的方法。最佳实践是在此方法内部(当您知道输入形状时)声明tf.Variables()
而不是__init__()
方法。此方法稍后会构建模型。
结论:如果使用call()
,它将与__call__
相同,此外,它还将建立模型。但是,如果您真的想使用稍后的版本,请同时声明build()
。