在tensorflow文档中,我看到了在子类化激活和模型时定义的call()方法。但是,在子类化正则化器、初始值设定项和约束的情况下,它们会改为定义 __class__() 方法。
当两者一起玩时,我自己找不到任何差异。
有人可以告诉我有什么区别吗?
__call__
是一个python魔术方法(或dunder方法),使类对象可调用。 但另一方面,call
是 Keras 中的用户定义方法,它在后台使用提到的__call__
方法,但在使用它之前,这个用户定义的call
会做一些额外的事情,例如根据输入张量形状构建权重和偏差张量。
call()
只是一个常规方法,您可以在类的实例上调用它,例如foo.call(...)
.
__call__()
是一种特殊方法,它使实例本身可调用。因此,与其做foo.call(...)
不如做foo(...)
.(您也可以foo.__call__()
仍然这样做。