在使用tf.layers中定义的层时,是否可以添加L2正则化?
在我看来,由于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
Run Code Online (Sandbox Code Playgroud)
现在用tf.layers.conv2d会是什么样子?
谢谢!
Rob*_*cok 35
您可以将它们作为参数传递tf.layers.conv2d:
regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
layer2 = tf.layers.conv2d(
inputs,
filters,
kernel_size,
kernel_regularizer=regularizer)
Run Code Online (Sandbox Code Playgroud)
然后你应该将正则化损失添加到你的损失中,如下所示:
l2_loss = tf.losses.get_regularization_loss()
loss += l2_loss
Run Code Online (Sandbox Code Playgroud)
编辑:感谢Zeke Arneodo,Tom和srcolinas,我补充说,最后一点反馈,以便接受的答案提供完整的解决方案.
小智 16
你的问题不是答案吗?您还可以使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23610 次 |
| 最近记录: |