正则化损失Tensorflow - TRAINABLE_VARIABLES到Tensor Array

时间:2016-12-12 23:47:40

标签: tensorflow

我想将L1和L2正则化添加到我的损失函数中。当我定义权重变量时,我选择要使用的正则化,但似乎我只能选择一个。

regLosses=tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(y_conv,y_))+regLosses

当我试图通过

手动获得损失时
weights=tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
l1Loss=tf.reduce_sum(tf.abs(weights))
l2Loss=tf.nn.l2loss(weights)
loss=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(y_conv,y_))+.1*l1Loss+.001*l2Loss

它不起作用 - 我认为因为TRAINABLE_VARIABLES返回变量而不是参数。我该如何解决?我的l1损失的手动计算是否正确?

提前致谢

1 个答案:

答案 0 :(得分:0)

所以我想我发现了答案。评论和评论欢迎。

当我创建权重时,我使用:                 W=tf.get_variable(name=name,shape=shape,regularizer=tf.contrib.layers.l1_regularizer(1.0))

注意到l1正则化只是权重绝对值的总和,而l2是权重的平方,那么我可以做到以下几点。

regLosses=tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
l1=tf.reduce_sum(tf.abs(regLosses))
l2=tf.reduce_sum(tf.square(reglosses))