Keras拟合时间序列输出恒定 适用的鼓励冒险猜测的损失函数
符合需求的Keras内置损失函数
你需要的是优先惩罚中小误差、对大误差惩罚力度增长平缓的损失函数,Keras内置符合要求的损失如下:
- *LogCosh损失(调用名
log_cosh)
误差较小时损失特性近似均方误差,对接近真值的精准预测的损失下降速度快,误差较大时损失特性近似平均绝对误差,大偏差预测的损失增长平缓,天然符合你对精准预测高奖励、极端错误低惩罚的需求。 - *Huber损失(调用类
tf.keras.losses.Huber)
可通过delta参数自定义误差阈值:当预测误差小于delta时采用平方损失,对小误差的惩罚权重更高,鼓励模型输出精准结果;当误差大于delta时采用线性损失,降低极端错误的惩罚力度。你可以将delta设置为全量样本预测平均值时的平均误差的0.7~0.8倍,即可满足1个正确预测加3个完全错误预测的累计损失低于4个平均水平预测累计损失的要求。 - *平均平方对数误差(调用名
mean_squared_logarithmic_error,简称MSLE)
通过对数变换压缩大误差的取值范围,自动放大小误差的相对惩罚权重,对精准预测的奖励效应更明显,仅要求预测目标为非负值,适配绝大多数时间序列的取值场景。
调用示例
import tensorflow as tf # 调用LogCosh损失 model.compile(optimizer="adam", loss="log_cosh") # 调用自定义阈值的Huber损失 model.compile(optimizer="adam", loss=tf.keras.losses.Huber(delta=0.75)) # 调用MSLE损失 model.compile(optimizer="adam", loss="mean_squared_logarithmic_error")
内容的提问来源于stack exchange,提问作者Pierre Vermot
相关产品推荐
相关产品推荐

