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

标签

我正在尝试为keras NN模型编写自定义损失函数,但似乎损失函数输出了错误的值。我的损失函数是

def tangle_loss3(input_tensor):
    def custom_loss(y_true, y_pred):
        true_diff = y_true - input_tensor
        pred_diff = y_pred - input_tensor
        
        normalized_diff = K.abs(tf.math.divide(pred_diff, true_diff))
        normalized_diff = tf.reduce_mean(normalized_diff)
        
        return normalized_diff
    
    return custom_loss

然后在简单的前馈网络中使用它:

input_layer = Input(shape=(384,), name='input')
hl_1 = Dense(64, activation='elu', name='hl_1')(input_layer)
hl_2 = Dense(32, activation='elu', name='hl_2')(hl_1)
hl_3 = Dense(32, activation='elu', name='hl_3')(hl_2)
output_layer = Dense(384, activation=None, name='output')(hl_3)

optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)

model = tf.keras.models.Model(input_layer, output_layer)
model.compile(loss=tangle_loss3(input_layer), optimizer=optimizer)

然后,为了测试损失函数是否起作用,我创建了一个随机输入和目标向量,并对期望值进行了numpy计算,但这似乎与keras的结果不匹配。

X = np.random.rand(1, 384)
y = np.random.rand(1, 384)

np.mean(np.abs((model.predict(X) - X)/(y - X)))
# returns some number 

model.test_on_batch(X, y)
# always returns 0.0

为什么我的损失函数总是返回零?这些答案应该匹配吗?

Niteya Shah |

我误解了您的问题,并且更新了我的方法。它现在应该可以工作。我堆叠输入层和输出层以获得传递给输出的新层。


    def tangle_loss3(y_true, y_pred):
        true_diff = y_true - y_pred[0]
        pred_diff = y_pred[1] - y_pred[0]
    
        normalized_diff = tf.abs(tf.math.divide(pred_diff, true_diff))
        normalized_diff = tf.reduce_mean(normalized_diff)
    
        return normalized_diff

    input_layer = Input(shape=(384,), name='input')
    hl_1 = Dense(64, activation='elu', name='hl_1')(input_layer)
    hl_2 = Dense(32, activation='elu', name='hl_2')(hl_1)
    hl_3 = Dense(32, activation='elu', name='hl_3')(hl_2)
    output_layer = Dense(384, activation=None, name='output')(hl_3)
    out = tf.stack([input_layer, output_layer])
    
    optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
    
    model = tf.keras.models.Model(input_layer, out)
    model.compile(loss=tangle_loss3, optimizer=optimizer)

现在当我计算损失时


    X = np.random.rand(1, 384)
    y = np.random.rand(1, 384)
    
    np.mean(np.abs((model.predict(X)[1] - X)/(y - X)))
    # returns some number
    
    model.test_on_batch(X, y)

注意,当我们得到两个输出时,我必须使用model.predict(X)[1],即输入层和输出层的结果。这只是一个骇人听闻的解决方案,但确实有效。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

函数给出错误translationMap未定义

来自分类Dev

函数给出错误“ div id”未定义。

来自分类Dev

在 Keras 中加载模型、自定义数据、大量论证后损失函数大幅增加

来自分类Dev

为自定义损失函数创建形状与模型输出相同的 keras 张量

来自分类Dev

`WEEKDAY`函数给出错误的值?

来自分类Dev

zip函数给出错误的输出

来自分类Dev

schematron局部函数给出错误

来自分类Dev

jQuery $ .map函数给出错误

来自分类Dev

schematron局部函数给出错误

来自分类Dev

函数给出错误的结果

来自分类Dev

JavaScript中的函数给出错误

来自分类Dev

JavaScript 替换函数给出错误

来自分类Dev

pow() 函数给出错误的结果

来自分类Dev

匹配函数给出错误的结果

来自分类Dev

自定义keras损失

来自分类Dev

keras 自定义损失函数转换为张量时的值错误

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用自定义损失函数创建Keras模型的函数只能使用一次

来自分类Dev

在路由中使用雄辩的模型回调函数给出错误

来自分类Dev

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

来自分类Dev

自定义x86内核访问char *的C函数给出随机值

来自分类Dev

StereoBm Opencv函数给出错误“无法定义抽象类的对象”

来自分类Dev

StereoBm Opencv函数给出错误“无法定义抽象类的对象”

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

    函数给出错误translationMap未定义

  5. 5

    函数给出错误“ div id”未定义。

  6. 6

    在 Keras 中加载模型、自定义数据、大量论证后损失函数大幅增加

  7. 7

    为自定义损失函数创建形状与模型输出相同的 keras 张量

  8. 8

    `WEEKDAY`函数给出错误的值?

  9. 9

    zip函数给出错误的输出

  10. 10

    schematron局部函数给出错误

  11. 11

    jQuery $ .map函数给出错误

  12. 12

    schematron局部函数给出错误

  13. 13

    函数给出错误的结果

  14. 14

    JavaScript中的函数给出错误

  15. 15

    JavaScript 替换函数给出错误

  16. 16

    pow() 函数给出错误的结果

  17. 17

    匹配函数给出错误的结果

  18. 18

    自定义keras损失

  19. 19

    keras 自定义损失函数转换为张量时的值错误

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

    使用自定义损失函数创建Keras模型的函数只能使用一次

  25. 25

    在路由中使用雄辩的模型回调函数给出错误

  26. 26

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

  27. 27

    自定义x86内核访问char *的C函数给出随机值

  28. 28

    StereoBm Opencv函数给出错误“无法定义抽象类的对象”

  29. 29

    StereoBm Opencv函数给出错误“无法定义抽象类的对象”

热门标签

归档