Python >> Tutoriel Python >  >> Python Tag >> Keras

Pourquoi dans l'API de sous-classement de Keras, la méthode d'appel n'est jamais appelée et, à la place, l'entrée est transmise en appelant l'objet de cette classe ?

En fait __call__ la méthode est implémentée dans le Layer classe, qui est héritée par Network classe, qui est héritée par Model classe :

class Layer(module.Module):
    def __call__(self, inputs, *args, **kwargs):

class Network(base_layer.Layer):

class Model(network.Network):

Alors MyClass héritera de ce __call__ méthode.

Informations supplémentaires :

Donc, en fait, ce que nous faisons est de remplacer le call hérité méthode, quel nouveau call la méthode sera alors appelée depuis le __call__ hérité méthode. C'est pourquoi nous n'avons pas besoin de faire un model.call() .Ainsi, lorsque nous appelons notre instance de modèle, elle est héritée de __call__ la méthode sera exécutée automatiquement, ce qui appelle notre propre call méthode.


Le rasoir d'Occam dit que le __call__ la méthode est implémentée dans le Model class, donc votre sous-classe héritera de cette méthode, c'est pourquoi l'appel fonctionne. Le __call__ dans le Model la classe transmet simplement les paramètres à votre call méthode et fait de la comptabilité.