在Keras中实现平等学习率

时间:2020-06-19 19:44:30

标签: tensorflow keras deep-learning generative-adversarial-network

我正在尝试在GAN中实现均等的学习率。我已经使用stddev以正态分布初始化了权重,并将图层的调用函数更改为:

def call(self, inputs):
    he_constant = tf.sqrt(
        x=2. / tf.size(input=self.kernel, out_type=tf.float32)
    )
    self.kernel = self.kernel * he_constant
    return super(EqualizedConv2D, self).call(inputs)

但是计算出的he_constant非常小,例如0.004,这导致网络不学习任何东西。最后,我人为地增加了此值

我想念什么?

1 个答案:

答案 0 :(得分:0)

我想,我已经找到了解决方案,我使用的是缩放后的权重,而不是替换它们。结果,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

如果仍然不正确,请告诉我。