我尝试在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
时并没有什么不同。 :-\
答案 0 :(得分:0)
您正在调用类实例
MyRegularization()
还是您要使用相同的类名调用该类的对象实例?
MyRegularization = MyRegularization()
...
MyRegularization()
因为只有后者会定义在将实例用作函数时执行的函数主体(__call__
)。那可以解释为什么不返回正则化值,从而看起来alpha
的值不影响训练。