Внедрение системы Equalized Learning Rate в Керасе - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь реализовать уравненную скорость обучения в моем 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 голосов
/ 21 июня 2020

Думаю, что я нашел решение, я использую масштабированные веса, а не заменяю их. В результате 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

Если это все еще неверно, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...