复杂的自定义损失函数的问题
Posted
技术标签:
【中文标题】复杂的自定义损失函数的问题【英文标题】: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这个功能并确保效率。谢谢!
【问题讨论】:
【参考方案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)
【讨论】:
@Hemisphere 如果您认为我的回答有帮助,您介意接受我的回答吗?如果您不确定何时以及如何处理答案,可以查看以下两个链接:what to do with answershow to accept answer以上是关于复杂的自定义损失函数的问题的主要内容,如果未能解决你的问题,请参考以下文章