【发布时间】:2017-12-07 15:06:16
【问题描述】:
我知道在 tensorflow 中使用 layer API 进行 l2 正则化有一些类似的问题,但我仍然不太清楚。
所以首先我在conv2d 层中重复设置kernel_regularizer,如下所示:
regularizer = tf.contrib.layers.l2_regularizer(scale=0.1)
tf.layers.conv2d(kernel_regularizer=)
然后我可以通过以下方式收集所有正则化损失:
regularization_losses = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
最后但并非最不重要的一点是,我必须将正则化项合并到最终损失中。但是,在这里我不太确定该怎么做,以下哪一项是正确的?
1) loss = loss + factor * tf.reduce_sum(regularization_losses)
2) loss = loss + tf.contrib.layers.apply_regularization(regularizer, weights_list=regularization_losses)
或者他们都错了?第二个选项的意思似乎很奇怪,因为我必须再次将正则化器作为参数传递,即使每一层都已经有一个正则化器作为参数。
编辑
loss_1 = tf.losses.mean_squared_error(labels=y, predictions=logits, weights=1000)
regularization_loss = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES)
loss = tf.add_n([loss_1] + regularization_loss, name='loss')
【问题讨论】:
标签: python machine-learning tensorflow neural-network deep-learning