Метод add_weight
принимает аргумент regularizer
, который можно использовать для применения регуляризации к весу. Например:
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]), self.num_outputs],
regularizer=tf.keras.regularizers.l1_l2())
В качестве альтернативы, чтобы иметь больше контроля, как другие встроенные слои, вы можете изменить определение настраиваемого слоя и добавить аргумент 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)
При этом вы даже можете передать строку типа 'l1'
или 'l2'
в kernel_regularizer
аргумент при построении слоя, и это будет правильно разрешено.