use*_*983 6 python machine-learning regularized keras tensorflow
请考虑 TensorFlow 教程中的以下自定义层代码:
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
def build(self, input_shape):
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]),
self.num_outputs])
def call(self, input):
return tf.matmul(input, self.kernel)
Run Code Online (Sandbox Code Playgroud)
tf.keras.regularizers.L1如何对自定义层的参数应用任何预定义的正则化(例如)或自定义正则化?
tod*_*day 13
该add_weight方法采用一个regularizer参数,您可以使用该参数对权重应用正则化。例如:
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]), self.num_outputs],
regularizer=tf.keras.regularizers.l1_l2())
Run Code Online (Sandbox Code Playgroud)
或者,要像其他内置层一样进行更多控制,您可以修改自定义层的定义并向方法添加kernel_regularizer参数__init__:
from tensorflow.keras import regularizers
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs, kernel_regularizer=None):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
self.kernel_regularizer = regularizers.get(kernel_regularizer)
def build(self, input_shape):
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]), self.num_outputs],
regularizer=self.kernel_regularizer)
Run Code Online (Sandbox Code Playgroud)
这样,您甚至可以在构造图层时将类似'l1'或 的字符串传递'l2'给参数,并且它会被正确解析。kernel_regularizer