keras源码中什么时候调用Layer.build()?

abh*_*jha 5 python neural-network keras keras-layer keras-2

keras 中 Layer 类的每个派生类都有build()定义。

build()是我们为 keras 层分配权重的地方。

什么时候内部调用这个函数?我无法找到任何可能调用它的代码

在位于topology.py:580__call_()的Layer类中,我们调用但只有当 时才会调用它。它总是被设置的,只有当 self.built 为 True 时才会被调用。self.build()self.built = Trueself.build()

Max*_*xim 2

你错过了not条件(源代码):

if not self.built:
  ...
  if len(input_shapes) == 1:
    self.build(input_shapes[0])
  else:
    self.build(input_shapes)
Run Code Online (Sandbox Code Playgroud)

...这基本上意味着“如果尚未构建”。

顺便说一句,build()也是在count_params()方法中调用,同样带有守卫(源代码)。