Keras,Python中的自定义损失函数?

马文

假设我们有预测的输出向量:

y_pred = [1, 0, 0, 1]

和实际的输出值:

y_true = [0, 1, 0, 0]

我想建立以下差异向量y_pred-y_true:

y_diff = [1, -1, 0, 1]

计算其中的1的数量并将其乘以一个常数。这应该是我的自定义损失函数的结果。目标是更加重视某种错误(在这种情况下,如果预测值为0而真实值为1,我希望损失更大)。

这是我的实现尝试:

def custom_loss_function(y_true, y_pred):
    # if it was 1 and you wrote 0, error is very very big
    y_diff = tf.math.subtract(y_true, y_pred)

    def fn(elem):
        if elem == 1:
            return 10
        elif elem == -1:
            return 1
        else:
            return 0

    return tf.reduce_sum(tf.map_fn(fn, y_diff))

问题在于,我的损失函数将不会是“可微的”。我认为这是我收到错误的原因:

ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval.

关于如何实现自定义损失函数(在当前任务中,根据某些条件会产生更大(或更小)损失)的任何想法?

sohv89

您的问题是矛盾的。您说要,y_pred - y_true但要y_true - y_pred在代码中计算不过,您可以使用以下内容。

def custom_loss_function(y_true, y_pred):
    # if it was 1 and you wrote 0, error is very very big
    y_diff = y_true - y_pred

    mul_mask = tf.cast(tf.math.equal(y_diff, 1.0), tf.float32)*9.0 + 1
    y_diff = tf.math.sqrt((y_diff * mul_mask)**2)

    return tf.reduce_sum(y_diff)

PS:我希望您有充分的理由使用此自定义损失功能。由于您可以class_weights在进行操作时仅使用参数进行加权model.fit(),因此,如果您只想按类加权,则无需自己实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Keras模型-在自定义损失函数中获取输入

来自分类Dev

在CNN的Keras自定义损失函数中处理数据

来自分类Dev

基于输入数据的Keras中的自定义损失函数

来自分类Dev

keras 中的加权 mse 自定义损失函数 - 自定义权重

来自分类Dev

Keras 中自定义损失的输出

来自分类Dev

自定义keras损失

来自分类Dev

Keras:无法在模型中使用自定义损失函数

来自分类Dev

自定义损失函数,Keras \\ ValueError:无渐变

来自分类Dev

自定义损失函数以在Python中使用Keras进行奖励

来自分类Dev

Keras Python 自定义损失函数给出张量(的绝对差值)的最大值?

来自分类Dev

Keras的自定义损失函数中y_true的大小

来自分类Dev

在keras自定义损失函数中获取训练数据形状

来自分类Dev

Keras自定义损失函数:tf.function-decorated中的ValueError

来自分类Dev

Keras中的自定义损失函数,使用掩码数组作为输入

来自分类Dev

在 keras 的自定义损失函数中做一些数学运算

来自分类Dev

如何计算自定义 keras 损失函数中属于一个标签类的元素?

来自分类Dev

Keras中的自定义损失函数应该返回该批次的单个损失值,还是返回该训练批次中每个样本的大量损失?

来自分类Dev

Keras上的自定义损失功能

来自分类Dev

在Keras建立自定义损失

来自分类Dev

如何在Tensorflow中编写自定义损失函数?

来自分类Dev

在自定义损失函数中迭代张量

来自分类Dev

张量流中的自定义损失函数

来自分类Dev

Keras my_layer.output返回KerasTensor对象而不是Tensor对象(在自定义损失函数中)

来自分类Dev

以y_true取决于y_pred的方式自定义Keras的损失函数

来自分类Dev

琐碎的自定义Keras损失函数导致精度指标失败

来自分类Dev

如何编写具有加权平均的keras自定义f1损失函数?

来自分类Dev

Tensorflow 2:自定义损失函数的工作原理与原始Keras SparseCategoricalCrossentropy不同

来自分类Dev

y_pred的自定义损失函数Keras仅高于某个阈值

来自分类Dev

Keras自定义损失函数InvalidArgumentError:In [1]不是矩阵。相反,它具有形状[]

Related 相关文章

  1. 1

    Keras模型-在自定义损失函数中获取输入

  2. 2

    在CNN的Keras自定义损失函数中处理数据

  3. 3

    基于输入数据的Keras中的自定义损失函数

  4. 4

    keras 中的加权 mse 自定义损失函数 - 自定义权重

  5. 5

    Keras 中自定义损失的输出

  6. 6

    自定义keras损失

  7. 7

    Keras:无法在模型中使用自定义损失函数

  8. 8

    自定义损失函数,Keras \\ ValueError:无渐变

  9. 9

    自定义损失函数以在Python中使用Keras进行奖励

  10. 10

    Keras Python 自定义损失函数给出张量(的绝对差值)的最大值?

  11. 11

    Keras的自定义损失函数中y_true的大小

  12. 12

    在keras自定义损失函数中获取训练数据形状

  13. 13

    Keras自定义损失函数:tf.function-decorated中的ValueError

  14. 14

    Keras中的自定义损失函数,使用掩码数组作为输入

  15. 15

    在 keras 的自定义损失函数中做一些数学运算

  16. 16

    如何计算自定义 keras 损失函数中属于一个标签类的元素?

  17. 17

    Keras中的自定义损失函数应该返回该批次的单个损失值,还是返回该训练批次中每个样本的大量损失?

  18. 18

    Keras上的自定义损失功能

  19. 19

    在Keras建立自定义损失

  20. 20

    如何在Tensorflow中编写自定义损失函数?

  21. 21

    在自定义损失函数中迭代张量

  22. 22

    张量流中的自定义损失函数

  23. 23

    Keras my_layer.output返回KerasTensor对象而不是Tensor对象(在自定义损失函数中)

  24. 24

    以y_true取决于y_pred的方式自定义Keras的损失函数

  25. 25

    琐碎的自定义Keras损失函数导致精度指标失败

  26. 26

    如何编写具有加权平均的keras自定义f1损失函数?

  27. 27

    Tensorflow 2:自定义损失函数的工作原理与原始Keras SparseCategoricalCrossentropy不同

  28. 28

    y_pred的自定义损失函数Keras仅高于某个阈值

  29. 29

    Keras自定义损失函数InvalidArgumentError:In [1]不是矩阵。相反,它具有形状[]

热门标签

归档