Подтвердить что ты не робот

Добавить L2-регуляризацию при использовании высокоуровневых tf.layers

Можно ли добавить регуляцию L2 при использовании слоев, определенных в tf.layers?

Мне кажется, что поскольку tf.layers - это оболочка высокого уровня, нет простого способа получить доступ к весам фильтра.

С tf.nn.conv2d

regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)

weights = tf.get_variable(
    name="weights",
    regularizer=regularizer
)

#Previous layers

...

#Second layer 
layer 2 = tf.nn.conv2d(
input,
weights,
[1,1,1,1],
[1,1,1,1])

#More layers
...

#Loss
loss = #some loss

reg_variables = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
reg_term = tf.contrib.layers.apply_regularization(regularizer, reg_variables)
loss += reg_term

Теперь, как это выглядит с помощью tf.layers.conv2d?

Спасибо!

4b9b3361

Ответ 2

Не ответ на ваш вопрос? Вы также можете использовать tf.losses.get_regularization_loss (https://www.tensorflow.org/api_docs/python/tf/losses/get_regularization_loss), который будет собирать все REGULARIZATION_LOSSES.

...
layer2 = tf.layers.conv2d(input, 
     filters, 
     kernel_size,                        
     kernel_regularizer= tf.contrib.layers.l2_regularizer(scale=0.1))
...
l2_loss = tf.losses.get_regularization_loss()
loss += l2_loss