我正在尝试为中间层的输出训练具有特殊属性的自动编码器。 我要添加到中间层的三个属性是峰值约束,非负约束和平均功率约束。
我已经对超参数进行了几次微调以训练自动编码器,但是损失函数的值始终保持相对较大。 我针对这些约束的代码如下:
# 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同时满足这些约束。 在我的想法中,实现约束的另一种可能有效的方法是在损失函数中添加正则化。但是,该方法仍然超出我的能力范围。