Думаю, что я нашел решение, я использую масштабированные веса, а не заменяю их. В результате GAN хорошо обучается, и потери более разумны. Новая реализация:
def call(self, inputs):
return super(EqualizedConv2D, self).call(inputs)
# --- disabled rest equalized learning rate for now, does not work as expected.
outputs = backend.conv2d(
inputs,
self.kernel*self.scale,
strides=self.strides,
padding=self.padding,
data_format=self.data_format,
dilation_rate=self.dilation_rate)
outputs = backend.bias_add(
outputs,
self.bias,
data_format=self.data_format)
if self.activation is not None:
return self.activation(outputs)
return outputs
Если это все еще неверно, дайте мне знать.