LeakyReLU对象可调用吗?

时间:2019-07-09 02:14:58

标签: python-3.x tensorflow keras

我试图通过阅读一些代码来弄清楚CNN的原理。 我看到了以下内容。

from keras.layers.convolutional import Convolution2D
from keras.layers import Input
from keras.layers.normalization import BatchNormalization
from keras.layers.advanced_activations import LeakyReLU

def Convolution(f, k=3, s=2, border_mode='same', **kwargs):

    return Convolution2D(f, k, k, border_mode=border_mode,
                         subsample=(s, s),
                         **kwargs)


def BatchNorm(mode=2, axis=1, **kwargs):

    return BatchNormalization(mode=2,axis=axis, **kwargs)

i = Input(shape=(1, 512, 512))
conv1 = Convolution(64)(i)
conv1 = BatchNorm()(conv1)
x = LeakyReLU(0.2)(conv1)

但是,我不明白最后一行。由于LeakyReLU是一个类,因此可以在代码

之后获得对象
LeakyReLU(0.2)

正在执行。那么(conv1)在LeakyReLU对象之后实际上意味着什么。 LeakyReLU对象可以调用吗?

1 个答案:

答案 0 :(得分:1)

在Python中,可以通过使用使对象可调用的特殊方法__call__使对象像函数一样可调用。 Keras implements it here


顺便说一句:使用Keras示例来理解CNN的工作方式非常差。我建议使用MOOC或更合适的是由Keras的作者撰写的文本Deep Learning with Python作为介绍。