python - tensorflow 非对称损失函数
问题描述
我想实现一个不对称的损失函数,例如参考这里
在 TensorFlow 中。
我目前正在使用均方误差损失函数:
mse = tf.reduce_mean(tf.squared_difference(out,Y))
我想用 mse = tf.reduce_mean(asymetric_squared_difference(out,Y,alpha)) 替换
我查看了 tf.squared_difference 的定义位置,发现https://www.tensorflow.org/api_docs/python/tf/squared_difference 其中说 tensorflow/python/ops/gen_math_ops.py
编辑:经过大量挖掘,从 ops.math_grad 第 999 行到第 1012 行调用 SquaredDifference。但它有很多额外的梯度功能,我不确定如何复制。
我将如何最好地添加此功能?
解决方案
您是想实现自己的,还是只想使用任何非对称函数(应该能够用作损失函数,因为“损失”函数只是用于控制损失的函数的标签)
这里的大多数不对称功能应该是兼容的。
在顶部,你可以使用
tf.zeta(x,q)
代替
tf.squared_difference(x,y)
用非对称损失函数(tf.zeta)替换对称损失函数(tf.squared_difference)。
如果您仍然想实现一个损失函数,那么您必须在两个Tensor
s 上定义操作(同时还要观察name
我遗漏的未列出的函数参数)并返回结果,就像 tf.zeta 所做的那样。
另外,您应该查看“预测失业率......” 满足您需求的论文,正如您在“交叉验证”堆栈交换帖子的链接中突出显示的那样,该帖子向您发送了您的旅程:) 它包含非对称损失函数所需的基本表达式的方程,这是我曾经搜索过的fortf.zeta
在 TensorFlow 文档中的“基本数学函数”。
但我可能完全错了。我不知道。我不使用 TensorFlow。. 。然而。
推荐阅读
- typescript - 从打字稿调用函数
- c# - 使用 XmlSerializer 序列化默认属性
- ruby - IO.select 打印数据?
- java - 创建一个长度由用户输入确定的数组:C vs C99 vs Java
- angular - Angular 5:请求不同布局的多种语言
- javascript - 使用除圆形以外的其他形状来设置 mapbox 点的样式
- javascript - Python Bokeh 标题和工具栏未呈现
- c# - 由空白行填充的 DataGrid 动态表 C#
- c# - 在 Dynamics CRM 中分解日期
- haskell - 对不同的数据类型构造函数使用不同的最小完整定义