【问题标题】:Question for complicated custom loss function复杂的自定义损失函数的问题
【发布时间】:2021-07-20 13:12:17
【问题描述】:

我发现了一些关于使用条件结构的自定义函数的有趣文章。例如,

loss = tf.reduce_sum(tf.where(tf.greater(y_T,y_P),(y_T-y_P)/a,(y_T-y_P)*b)) 

这让我印象深刻。深度学习的基本学习过程依赖于 BP。 tensorflow 能否完成如此复杂的 BP 流程?我很难想象如何BP这个功能并确保效率。谢谢!

【问题讨论】:

    标签: tensorflow deep-learning tensorflow2.0 loss-function


    【解决方案1】:

    是的,你可以,但它必须是一个函数,而不是变量
    你可以有一个这样的客户损失函数:

    def cust_func(a, b):
        def cust_loss_inner(y_T, y_P):
            y_T, y_P = tf.dtypes.cast(y_T, tf.float32), tf.dtypes.cast(y_P, tf.float32)
            return tf.reduce_sum(tf.where(tf.greater(y_T, y_P), (y_T - y_P) / a, (y_T - y_P) * b))
        return cust_loss_inner
    

    您也可以选择将 y_T、y_P 转换为 float64 或其他,但它们必须具有相同的类型。

    要使用上面的loss,你可以用下面的代码编译,3和4对应你想要的a和b值。

    model.compile(optimizer=OPTIMIZER,
                      loss=cust_func(3, 4),
                      metrics=METRICS)
    

    【讨论】:

    猜你喜欢
    • 2018-03-18
    • 2022-01-10
    • 2018-05-25
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2020-12-19
    • 2017-04-04
    相关资源
    最近更新 更多