【问题标题】:Implementation of Equalized Learning Rate in KerasKeras 中均衡学习率的实现
【发布时间】:2020-06-21 21:30:21
【问题描述】:

我正在尝试在我的 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,这导致网络不学习任何东西。我已经人为地增加了这个值

我错过了什么?

【问题讨论】:

  • 设置 self.kernel 有问题吗?缩放的是否应该仅用于“呼叫”而不是按缩放存储?
  • 试过了,重新实现了调用,所以缩放权重仅用于 backend.conv2d,结果不是随机的,但是我得到了看起来像模式崩溃的奇怪效果,因为输出几乎变成了一种颜色,但变化非常快

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


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-05-17
  • 2019-06-11
  • 2016-06-15
  • 2019-09-03
  • 2021-09-26
  • 2021-04-08
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多