How objects are called in Keras
This post elucidates how layers (for instance class MyLayer(Layer)
) are called in Keras when we perform operations such as x_output = MyLayer( .... , ...)(x_input)
. In this example, the MyLayer
class instance is called directly with input x_input
. This action calls the def __call__()
function, found in the parent of MyLayer
which is class Layer()
. The def __call__()
function in the parent class, in-turn calls the def call()
in MyLayer
class which defines the logic of MyLayer
layer.
I have given a simplified example below describing this operation flow.
class Layer():
def __init__(self,x):
print('Inside Layer -> __init__ :',x)
def __call__(self, y):
print('Inside Layer -> __call__ :',y)
self.call(y)
def call(self,z):
print('Inside Layer -> call :',z)
class MyLayer(Layer):
def __init__(self,k):
print('Inside MyLayer -> __init__ :',k)
super(MyLayer, self).__init__(k)
def call(self, m):
print('Inside MyLayer -> call :',m)
if __name__ == '__main__':
obj = MyLayer(3)
obj(4)
Upon running the above code, the output is as follows:
Inside MyLayer -> __init__ : 3
Inside Layer -> __init__ : 3
Inside Layer -> __call__ : 4
Inside MyLayer -> call : 4
Leave a comment