在Keras建立自定义损失

强尼普

我一直在尝试在Keras中建立自己的自定义损失,并遇到一些错误。

我的需求是:我想在一个稳定的时间序列上建立一个分类器:它必须确定曲线是否具有上升趋势或下降趋势,这意味着如果导数在2或3个时间步长为负,则必须保持“上升”分类,而不是在短时间内切换到后代。输入数据是上下文数据,应有助于NN检测时间序列方向上的当前变化是否可能持续。

为此,我设想建立一个自定义损失函数,该函数将为参考上方或下方的每次分类更改增加罚款。

我首先想在预测和参考张量上使用np.where,但是我知道浏览论坛是不可能的,因为损失函数使用占位符张量。我必须留在keras后端的功能空间内。

因此,我使用在该论坛上找到的一些代码来构建以下损失函数:

import keras.backend as kb

def roll_reg(x):
    length = kb.int_shape(x)[0]
    x_tile = kb.tile(x, [2, 1])
    x_roll = x_tile[length - 1:-1]
    return kb.sum(kb.abs(x - x_roll))

def custom_loss(y_actual,y_predicted):
    posact=kb.flatten(y_actual)
    pospred=kb.flatten(y_predicted)
    na=roll_reg(posact)
    np=roll_reg(pospred)
    loss_cust=kb.mean(((y_actual-y_predicted)**2)**0.5/(kb.max(y_actual)-kb.min(y_actual)))+abs(na-np)/kb.int_shape(posact)*10
    return loss_cust

但我仍然收到此错误:

ValueError:形状必须为1级,但对于'loss_9 / dense_25_loss / Tile'(op:'Tile'),输入形状为[?],[2]的形状必须为2级。

我将其解释为无法对占位符张量进行操作……而我试图对此类张量使用专用功能。

有人对我可以做些什么来改进此代码以使我的损失功能运行有任何想法吗?

有关此问题的一些更新。我在互联网上找到此页面:https : //medium.com/@j.ali.hab/on-custom-loss-functions-in-keras-3af88cf59e48,其中使用tf.math库解决了相同的问题。

所以我将代码更新为:

def custom_loss(y_actual,y_predicted):
    na=kb.tf.math.cumsum(y_actual,axis=0)
    np=kb.tf.math.cumsum(y_predicted,axis=0)

    penalty=kb.abs(kb.sum(np-na))/118319#/kb.int_shape(y_actual)[0]
    loss_nico=penalty
    return loss_nico

现在代码正在编译,但是在每个纪元的最后我都得到一个Nan作为损失函数。当然,结果就是神经网络没有学到任何东西。

有人知道我在做什么错吗?

强尼普

OK,我终于明白了!

问题出在te kb.abs()中:不需要,因为kb.sum()返回标量。

因此,有效的最终代码是:

def custom_loss(y_actual,y_predicted):

    na=kb.tf.math.cumsum(y_actual,axis=0)
    np=kb.tf.math.cumsum(y_predicted,axis=0)
    penalty=abs(kb.sum(na-np))
    loss_nico=kb.sum(((y_actual-y_predicted)))/1000+penalty/1000
    return loss_nico

这样可以编译并使RN能够实际学习某些东西。它仍然不是完美的,因为“无罚”部分应该改进,但仍然可以工作。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义keras损失

来自分类Dev

Keras上的自定义损失功能

来自分类Dev

Keras 中自定义损失的输出

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何为Keras使用自定义损失功能

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

带和不带自定义循环的Keras中的回归自定义损失返回值

来自分类Dev

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

来自分类Dev

如何在Keras中实现此自定义损失功能?

来自分类Dev

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

来自分类Dev

带有“ sparse_softmax_cross_entropy_with_logits”的自定义keras损失-排名不匹配

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在Keras模型的自定义损失中访问Tensor的内容

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何将tensorflow自定义损失用于keras模型?

来自分类Dev

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

来自分类Dev

如何在Keras中加快具有自定义损失功能的模型的训练?

来自分类Dev

张量的矢量化运算,而不是在keras自定义损失函数中使用for循环

来自分类Dev

在Keras / Tensorflow自定义损失函数中使用其他**可**变量

来自分类Dev

Keras模型的自定义损失函数给出错误答案

Related 相关文章

  1. 1

    自定义keras损失

  2. 2

    Keras上的自定义损失功能

  3. 3

    Keras 中自定义损失的输出

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

    如何为Keras使用自定义损失功能

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

    带和不带自定义循环的Keras中的回归自定义损失返回值

  13. 13

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

  14. 14

    如何在Keras中实现此自定义损失功能?

  15. 15

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

  16. 16

    带有“ sparse_softmax_cross_entropy_with_logits”的自定义keras损失-排名不匹配

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    如何在Keras模型的自定义损失中访问Tensor的内容

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

    如何将tensorflow自定义损失用于keras模型?

  25. 25

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

  26. 26

    如何在Keras中加快具有自定义损失功能的模型的训练?

  27. 27

    张量的矢量化运算,而不是在keras自定义损失函数中使用for循环

  28. 28

    在Keras / Tensorflow自定义损失函数中使用其他**可**变量

  29. 29

    Keras模型的自定义损失函数给出错误答案

热门标签

归档