我正在处理一个语义分割项目,我必须处理高度不平衡的多类数据。我在训练期间使用 model.fit
参数搜索优化它,并在其中使用 class_weights
或 sample_weights
。
我可以使用 class_weight 字典实现以下内容
{ 0:1, 1:10,2:15 }
我还在loss function
中看到了一种更新权重的方法
但是这些权重在什么时候更新?
kernel_regularizer
,所以如果我的类必须根据我的类权重受到惩罚,那么它会惩罚每一层的输出 y=Wx+b 还是只在最后一层?对此的任何解释都会非常有用。
答案 0 :(得分:1)
您在字典中提到的 class_weights
用于解释不平衡的数据。它们永远不会改变,它们只是为了增加对少数类的错误分类实例的惩罚(这样你的网络会更加关注它们,并且返回的梯度将一个 'Class2' 实例视为比一个重要 15 倍) Class0' 实例).
您提到的 kernel_regularizer
位于您的损失函数中,并惩罚整个网络中权重矩阵的大权重范数(如果您在 kernel_regularizer = tf.keras.regularizers.l1(0.01)
层中使用 Dense
,它只会影响该层)。所以这是一个不同的权重,与类无关,只与网络内部的权重有关。您最终的损失将类似于 loss = Cross_entropy + a * norm(Weight_matrix),这样网络将作为附加任务分配给它,以在权重范数保持较低的情况下最小化分类损失(交叉熵)。