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

When is Layer.build() invoked in source code in keras?

keras 中 class 层的每个派生 class 都有 build() 定义。

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

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

topology.py:580层class的__call_()中调用self.build(),但只有在self.built = True时才会调用。这总是在 self.build() 中设置,只有当 self.built 为真时才会调用它。

您错过了 not 条件 (source code):

if not self.built:
  ...
  if len(input_shapes) == 1:
    self.build(input_shapes[0])
  else:
    self.build(input_shapes)

... 这基本上意味着 "build if not already".

顺便说一下,build() 也在 count_params() 方法中被调用,同样带有一个守卫 (source code)。