【发布时间】:2018-10-28 00:00:29
【问题描述】:
我想在 keras 中创建一个自定义损失函数。
假设我有 yTrue 和 yPred,它们是真实标签和预测标签的张量 (n x m)。
我们将每个样本 n(即 yTrue 和 yPred 中的每一行)称为 yT 和 yP。 然后我想要一个在 yT[0] == 1 时计算 (yT-yP)^2 的损失函数,否则它将计算 (yT[0]-yP[0])^2。
也就是说:对于每个样本,我总是想计算第一个元素的平方误差 - 但我只想在真实标签的第一个元素 == 1 时计算其他元素的平方误差。
如何在自定义损失函数中做到这一点?
这是我目前得到的:
我需要用张量操作来做到这一点。 首先我可以计算
Y = (yTrue - yPred)^2
然后我可以定义一个掩码矩阵,其中第一列始终为 1,其他为 1,具体取决于 yTrue 的每一行的第一个元素的值。 所以我可以得到类似的东西
1 0 0 0 0
1 0 0 0 0
1 1 1 1 1
1 1 1 1 1
1 0 0 0 0
然后我可以将这个矩阵与 Y 相乘,得到我想要的。
但是,如何生成屏蔽矩阵?特别是在tensorflow/keras中“如果行的第一个元素是1”这个条件怎么办?
也许有更好的方法来做到这一点? 谢谢
【问题讨论】:
标签: tensorflow keras