Добавить пользовательскую регуляризацию - включает информацию о смещении слоя - PullRequest
0 голосов
/ 28 января 2019

В keras.regularizer можно добавить собственный регуляризатор.Пример в руководстве по keras:

def l1_reg(weight_matrix):
    return 0.01 * K.sum(K.abs(weight_matrix))

Однако я хочу упорядочить свой слой с помощью функции, которая включает в себя как вес слоя, так и смещение слоя (Вектор b в активации слоя: z = Wx + b)

например, я хотел бы иметь в качестве регуляризатора:

def l1_special_reg(weight_matrix,bias_vector):
    return 0.01 * K.sum(K.abs(weight_matrix)-K.abs(bias_vector))

Но я не смог найти, где можно определить добавление вектора смещения в качестве входа в keras.regularizer

Спасибо,

1 Ответ

0 голосов
/ 28 января 2019

Вы можете позвонить layer[idx].trainable_weights, он вернет как weights, так и bias.После этого вы можете вручную добавить эту потерю регуляризации в функцию потерь модели следующим образом:

model.layers[-1].trainable_weights

[<tf.Variable 'dense_2/kernel:0' shape=(100, 10) dtype=float32_ref>,
 <tf.Variable 'dense_2/bias:0' shape=(10,) dtype=float32_ref>]

Полный пример с функцией потерь:

# define model
def l1_reg(weight_matrix):
    return 0.01 * K.sum(K.abs(weight_matrix))

wts = model.layers[-1].trainable_weights # -1 for last dense layer.
reg_loss = l1_reg(wts[0]) + l1_reg(wts[1])

def custom_loss(reg_loss):
    def orig_loss(y_true, y_pred):
        return K.categorical_crossentropy(y_true, y_pred) + reg_loss
    return orig_loss

model.compile(loss=custom_loss(reg_loss),
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...