В Python классы могут иметь метод __call__
, что означает, что экземпляры классов могут быть вызваны.
Итак, вполне нормально звонить Activation(...)(...)
.
Первый шаг создает экземпляр Activation
, а второй вызывает этот экземпляр с некоторыми параметрами.
Это точно так же, как и:
activationLayer = Activation('relu')
outputTensor = activationLayer(inputTensor) #where inputTensor == X in your example
Скроме того, вы также можете повторно использовать одни и те же слои с разными входными тензорами:
activationLayer = Activation('relu')
out1 = activationLayer(X1)
out2 = activationLayer(X2)
Это не имеет большого значения для стандартного слоя активации, но становится очень интересным с некоторыми обученными слоями.
Пример: вы хотите использовать стандартную обученную модель VGG16 для обработки двух изображений, а затем соединить изображения:
vgg16 = keras.applications.vgg16(......)
img1 = Input(imageShape1)
img2 = Input(imageShape2)
out1 = vgg16(img1) #a model is also a layer by inheritance
out2 = vgg16(img2)
... continue the model ....