【问题标题】:loss function with distinct weight for every input每个输入具有不同权重的损失函数
【发布时间】:2017-03-08 09:08:11
【问题描述】:

我想设计我的自定义损失函数,它不仅包含两个输入(y_real 和 y_pred),但我不知道我是否可以做到以及如何做到。

我已经浏览了关于损失函数的答案,所有答案都只输入 y_real 和 y_pred。

但在我的项目中,真假预测的损失是不同的,例如 X1 与 (loss_T1,loss_F1),X2 与 (loss_T2, loss_F2)。

所以对于我的损失函数,我需要输入四个变量(y_real,y_pred,loss_T,loss_F)。 loss_T,loss_F 作为特征之一在 X (我的数据的每一行)内。

feature1 feature2 feature3 Loss_T Loss_F y X1
X2
X3

有没有办法做到这一点?

感谢您的出色贡献。

【问题讨论】:

  • 你的意思是你需要不同的样本(例如整个向量)不同的权重,不同的属性或不同的权重? (向量的元素)。
  • 可以尝试为你的损失想出一个数学公式吗?
  • 如果 loss_T 和 Loss_F 是您所说的特征,请将它们的值提供给一些占位符并使用 tensorflow 提供的基本数学运算来构建您的损失函数(例如 tf.add(x,y), tf.子(x,y),tf.square(x),tf.reduce_sum(x)等......)。 TensorFlow 将负责反向传播或其他更新。
  • @maz 不同样本的不同权重
  • @kaufmanu 我可以为它写一个新的损失函数,但是我需要为每个样本输入损失,我不知道在这种情况下如何传递参数。

标签: tensorflow keras


【解决方案1】:

较低级别的 tensorflow API 可以为您工作。例如,Optimizer.optimize_loss 取一个损失张量,它只是损失函数的输出,并将其最小化。所以如果你直接使用optimize_loss,你可以用任何你想要的复杂方式来构建你的损失函数。

【讨论】:

  • 我按照您的建议尝试这种方式。当我在损失函数中使用 if-else 时,它​​会报告没有为任何变量提供梯度的错误。无论如何要解决这个问题?
  • 你试过用tf.cond代替if-else吗? tensorflow自动微分不支持if-else。
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 2019-05-19
  • 1970-01-01
  • 2014-10-15
相关资源
最近更新 更多