Keras 均衡学习率的实现
Implementation of Equalized Learning Rate in Keras
我正在尝试在我的 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非常小,e.g. 0.004,这导致网络无法学习任何东西。我通过人为增加这个值结束了
我错过了什么?
我想,我已经找到了解决方案,我正在使用缩放权重,而不是替换它们。因此,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
如果仍然不正确,请告诉我。
我正在尝试在我的 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非常小,e.g. 0.004,这导致网络无法学习任何东西。我通过人为增加这个值结束了
我错过了什么?
我想,我已经找到了解决方案,我正在使用缩放权重,而不是替换它们。因此,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
如果仍然不正确,请告诉我。