TensorFlow 不仅支持经典的损失的损失函数,还可以优化任意的自定义损失函数。
在预测商品销量时,如果预测多了(预测值比真实销量大),商家损失的是生产商品的成本;而如果预测少了(预测值比真实销量小),损失的则是商品的利润。
因为一般商品的成本和商品的利润不会严格相等,所以使用前面介绍的经典损失函数:交叉熵和经典损失函数:均方差就不能够很好地实现最大化利润。
比如一个商品的成本是 1 元,但利润是 10 元,那么少预测一个就少挣 10 元;而多预测一个才少挣 1 元。如果神经网络模型最小化的是均方误差,那么很有可能此模型就无法最大化预期的利润。
为了最大化预期利润,需要将损失函数和利润直接联系起来。
注意,损失函数定义的是损失,所以要将利润最大化,定义的损失函数应该刻画成本或者代价。以下公式给出了一个当预测多于真实和预测少于真实值时有不同损失系数的损失函数:
和均方差公式类似,
在 TensorFlow 中,可以通过以下代码来实现这个损失函数:
loss = tf.reduce_sum(tf.where(tf.greater(v1, v2), (v1-v2)*a, (v2-v1)*b))