TensorFlow中的活动正规化器

时间:2018-04-30 08:42:14

标签: python tensorflow keras

在Keras中,对于密集层,我们可以使用参数activity_regularizer。 在Tensorflow中,没有类似的参数。

Keras:

from keras import regularizers
encoding_dim = 32
input_img = Input(shape=(784,))
# add a Dense layer with a L1 activity regularizer
encoded = Dense(encoding_dim, activation='relu', activity_regularizer=regularizers.l1(10e-5))(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)
autoencoder = Model(input_img, decoded)

如何在tensorflow中制作activity_regularizer?

2 个答案:

答案 0 :(得分:4)

Keras文档不太精确,但从我所读的活动中,正则化只是一个L1或L2项,用于添加到模型的相应损失函数的特定层的输出。

所以,让我们说你有一些损失,例如某些标签的MSE:

loss = tf.metrics.mean_squared_error(labels, model_output)

要将L1活动正则化添加到某个图层,您只需将该图层输出的L1正则化项添加到您的损失中,并使用一些正则化强度(I' ll 10e-5就像您的问题中给出的那样):

loss += 10e-5*tf.nn.l1_loss(layer_output)

layer_output是您要监管的图层的输出。

如果您对图层的权重而不是其输出执行相同的操作,那么Keras documentation会调用内核正则化。如果对该层的偏置矢量执行相同操作,则会得到Keras的偏差正则化。

答案 1 :(得分:2)

  • tensorflow在tf.keras中实现了Keras API,因此从技术上讲,如果它在Keras中定义,它应该是/应该是张量流。
  • tensorflow中的其他高级API具有类似的行为。例如,tf.layer.Dense在其构造函数中包含kernel_regularizerbias_regularizer个参数。
  • 如果您不想使用高级API,而是自己实现所有内容,则可以为损失添加一个正规化器。例如,参数的L2正则化是通过将其平方元素的总和加到损失乘以与该约束的强度相关的某个常数来实现的。 (示例中的10e-5因子)。