不理解Keras中的双括号语法。

6

你好,我是Python和Keras的新手,正在查看一些Keras示例代码:

model = VGG19(weights='imagenet',include_top=False)
model.trainable=False
x = Flatten(name='flat')(model)
x = Dense(512, activation='relu', name='fc1')(x)
x = Dense(512, activation='relu', name='fc2')(x)
x = Dense(10, activation='softmax', name='predictions')(x)

“我不理解 x=Dense(....)(x) 中第二个括号的用法是什么?如果我想查看 Python 文档,这种语法叫什么?”

2
参考Keras Functional API Docs - sshashank124
1
Dense 似乎是一个实现了 __call__ 的类。第一次调用创建一个实例,第二次在该实例上调用 .__call__(x) - Klaus D.
我知道如何搜索,我的问题是关于Python语法而不是Keras。 - pumper
1
好问题!不要被踩票数影响。 - jjepsuomi
1个回答

5
这可能是这些链式调用的更易懂的版本:
model = VGG19(weights='imagenet',include_top=False)
model.trainable=False
layer1 = Flatten(name='flat')(model)
layer2 = Dense(512, activation='relu', name='fc1')(layer1)
layer3 = Dense(512, activation='relu', name='fc2')(layer2)
layer4 = Dense(10, activation='softmax', name='predictions')(layer3)

这可以被重写为:

model = VGG19(weights='imagenet',include_top=False)
model.trainable=False
model.add( Flatten(name='flat'))
model.add( Dense(512, activation='relu', name='fc1'))
model.add( Dense(512, activation='relu', name='fc2'))
model.add( Dense(10, activation='softmax', name='predictions'))

谢谢Lenik,你能给我展示一个简单的Python代码吗? - pumper
@pumper,请查看更新后的答案。 - lenik
谢谢,现在我看到了。 - pumper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接