Keras ,如何在优化和训练模型时控制 non-zero weights
的数量,以便我们有一个固定数量的 {{1 }} 。像正交匹配追求的东西。这可以通过将约束添加到成本函数
答案 0 :(得分:0)
可以使用Keras中的regulizers来控制模型的权重。它的工作原理是根据权重对损失函数添加惩罚。我在某种程度上将它用于稀疏自动编码器,就像文档中描述的那样:
from keras import backend as K
def l1_reg(weight_matrix):
return 0.01 * K.sum(K.abs(weight_matrix))
model.add(Dense(64, input_dim=64,
kernel_regularizer=l1_reg)
但是,不仅可以限制权重之和,还可以限制零权重。例如,限制可以是M = weight_matrix.size - N
,惩罚取决于M
与零权重数之间的增量的绝对值,因此网络的最接近的数量为non-zero weights
到{{1将有最小的惩罚
其他信息
根据我在训练过程中的经验,很少有人将权重变为零,主要是他们保持非常小但仍然不是零值。在这种状态下,它们对网络的工作几乎没有任何影响,所以我建议使用阈值将它们考虑为零重量
代码示例:
N