Keras中的正则化层不起作用

时间:2020-04-18 12:30:37

标签: python tensorflow keras

我尝试在Keras中编写一个简单的自定义层用于正则化,如下所示:

from tensorflow.keras.regularizers import Regularizer
import tensorflow as tf

class MyRegularization(Regularizer):
      def __init__(self):
          self.alpha = 100000000

      def __call__(self, w):
          return self.alpha * tf.reduce_sum(w ** 2)

如您所见,正则化的系数是如此之大。然后,将此正则化添加到简单网络的每一层:

model = Sequential([
      Dense(1000, activation='relu', input_shape=[10,], kernel_regularizer=MyRegularization()),
      Dense(100, activation='relu', kernel_regularizer=MyRegularization()),
      Dense(10, activation='relu', kernel_regularizer=MyRegularization()),
      Dense(2, activation='softmax', kernel_regularizer=MyRegularization()),
])

我希望由于alpha的学习效果不会收敛,但是看起来alpha的值不会影响训练过程。为什么?

我拿了alpha = 1e-4,但是当alpha=1e+10时并没有什么不同。 :-\

1 个答案:

答案 0 :(得分:0)

您正在调用类实例

MyRegularization()

还是您要使用相同的类名调用该类的对象实例?

MyRegularization = MyRegularization()
...
MyRegularization()

因为只有后者会定义在将实例用作函数时执行的函数主体(__call__)。那可以解释为什么不返回正则化值,从而看起来alpha的值不影响训练。