【问题标题】:Can Neural Network model use Weighted Mean (Sum) Squared Error as its loss function?神经网络模型可以使用加权平均(和)平方误差作为其损失函数吗?
【发布时间】:2017-12-22 03:17:06
【问题描述】:

我在这个研究领域是菜鸟,可能这是一个非常愚蠢的问题。我想建立一个正常的 ANN,但我不确定是否可以使用加权均方误差作为损失函数。 如果我们没有平等地对待每个样本,我的意思是我们更关心样本的某些类别的预测精度而不是其他类别,那么我们想要形成一个加权损失函数。 假设我们有一个分类特征cii 是样本的索引,为了简单起见,我们假设这个特征取二进制值,0 或 1。因此,我们可以将损失函数形成为/p>

(ci + 1)(yi_hat - yi)^2

#and take the sum for all i

反向传播会有什么问题吗?我认为计算梯度或更新层之间的权重没有任何问题。 而且,如果没有问题,我如何在 Keras 中编程这个损失函数?因为好像损失函数只带了y_truey_pred这两个参数,那要怎么插入向量c呢?

【问题讨论】:

  • 我觉得这有可能成为一个非常好的问题——但这不会是 Stack Overflow 的最佳格式。您能否向我们展示您尝试过的代码,并尝试格式化问题。现在是一段文字,每一步都很难理解

标签: python neural-network keras


【解决方案1】:

这绝对没有错。函数可以自行声明常量,甚至可以从外部范围获取常量:

import keras.backend as K

c = K.constant([c1,c2,c3,c4,...,cn])

def weighted_loss(y_true,y_pred):
    loss = keras.losses.get('mse')
    return c * loss(y_true,y_pred)

一模一样:

def weighted_loss(y_true,y_pred):

    weighted = (c+1)*K.square(y_true-y_pred)
    return K.sum(weighted)

【讨论】:

  • 非常感谢!因此,所有常量都必须使用 K.constant 重新定义,而且我不能简单地将向量乘以张量。
  • 是的。您可以使用标量 python 数字,但不能使用列表。 (我不知道)。
猜你喜欢
  • 1970-01-01
  • 2019-09-02
  • 2021-12-30
  • 2019-02-12
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2018-07-25
相关资源
最近更新 更多