训练自动编码器时,如何为中间层的输出添加非负性和峰值约束?

时间:2019-01-20 14:10:40

标签: python tensorflow keras autoencoder

我正在尝试为中间层的输出训练具有特殊属性的自动编码器。 我要添加到中间层的三个属性是峰值约束,非负约束和平均功率约束。

  1. 峰值约束意味着输出不得大于约束。
  2. 非负约束表示输出不得小于零。
  3. 平均功率约束意味着输出的方差应该是一个特殊值。

我已经对超参数进行了几次微调以训练自动编码器,但是损失函数的值始终保持相对较大。 我针对这些约束的代码如下:

# encoded1 means the mid-layer's output
# average power constraint    
encoded2 = BatchNormalization(momentum=0, center=False, scale=False)(encoded1)
peak = tf.constant([2.0])
# non-negativity constraint
encoded2 = Lambda(lambda x: keras.activations.relu(x))(encoded2)
# peak constraint
encoded3 = Lambda(lambda x: keras.backend.minimum(x, peak))(encoded2)

我的目标是强制encoding3同时满足这些约束。 在我的想法中,实现约束的另一种可能有效的方法是在损失函数中添加正则化。但是,该方法仍然超出我的能力范围。

0 个答案:

没有答案