目录
目录
tensorflow2.0内置正则项
在隐藏层中经常会使用正则来作为损失函数的惩罚项。换言之,为了约束w的可能取值空间从而防止过拟合,我们为该最优化问题加上一个约束,就是w的L1范数或者L2范数不能大于给定值。
L2正则被用于防止模型的过拟合,L1正则项被用于产生稀疏权值矩阵。
tf.keras.regularizers提供了几种内置类来提供正则。分别是class L1、class L1L2、class L2、class Regularizer 、serialize。同时提供了三个参数作为可被正则化的对象:
- kernel_regularizer:对该层中的权值矩阵layer.weights正则
- bias_regularizer:对该层中的偏差矩阵layer.bias正则
- activity_regularizer:对该层的输出值矩阵layer.bias正则
设置kernel_regularizer
dense = tf.keras.layers.Dense(3, kernel_regularizer='l1')
layer = tf.keras.layers.Dense(
5, input_dim=5,
kernel_initializer='ones',
kernel_regularizer=tf.keras.regularizers.L1(0.01),
activity_regularizer=tf.keras.regularizers.L2(0.01))
tensor = tf.ones(shape=(5, 5)) * 2.0
out = layer(tensor)
tf.keras.regularizers.l1_l2(l1=0.01, l2=0.01)
tf.keras.regularizers.L1L2( l1=0.0, l2=0.0)
调用kernel_regularizer=tf.keras.regularizers.l1_l2(l1=0.02, l2=0.01)时, l o s s e s = L 1 + L 2 = l 1 ∑ ( ∣ w i j ∣ ) + l 2 ∑ ( w i j 2 ) losses=L_1+L_2=l_1\sum(|w_{ij}|)+l_2\sum(w_{ij}^2) losses=L1+L2=l1∑(∣wij∣)+l2∑(wij2)
layer1 = layer = tf.keras.layers.Dense(
5, input_dim=5,
kernel_initializer='ones',
kernel_regularizer=tf.keras.regularizers.l1_l2(l1=0.02, l2=0.01))
out1 = layer1(tensor1)
print(layer1.losses)
print("W--",layer1.weights)
[<tf.Tensor: shape=(), dtype=float32, numpy=0.75>]
W-- [<tf.Variable 'dense_11/kernel:0' shape=(5, 5) dtype=float32, numpy=
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]],
dtype=float32)>, <tf.Variable 'dense_11/bias:0' shape=(5,) dtype=float32, numpy=array([0., 0., 0., 0., 0.], dtype=float32)>]
设置activity_regularizer
在设定activity_regularizer的正则系数时有些不同。 l o s s e s = L 1 = 1 n s a m p l e l 1 ∑ ( ∣ w i j ∣ ) losses=L_1 =\frac{1}{n_{sample}}l_1\sum(|w_{ij}|) losse