0
点赞
收藏
分享

微信扫一扫

自定义损失函数


    使用损失函数的目的就是,为了描述神经网络预测的答案和真实的答案之间的“距离” ,我们自己定义的损失函数也要符合这一标准。 下面以一个具体的预测商品的出货量问题介绍一下自定义损失函数。

   假设工厂需要预测某种商品的出货量来制定生产计划,如果预测值大于买家的购买力,则这批商品会滞销,造成的损失就是浪费了生产这批商品的成本。如果预测值小于买家的购买力,则这商品会因为没能提供足够的商品而造成利润上的损失。

   比如商品的成本是 5 元, 利润是 2 元 。 那么每少预测一个商品就少赚 2元 ,每多预测一个商品就损失5 元。

    那么损失函数就被分成两个分段函数。yi 表示第 i 个数据的正确答案,yi‘ 表示 神经网络预测的值 , a ,b 是常量系数。

                       

自定义损失函数_神经网络

                         

自定义损失函数_tensorflow_02

            if   y> y'                      

自定义损失函数_tensorflow_03

             if y'  >y

         最小化这个损失函数即可得到模型给出最佳出货量方案。 在tensorflow  中 可以通过 where()函数 和 greater() 函数实现这个损失函数 。

 

loss = tf.reduce_sum(tf.where(tf.greater(y,y_),(y-y_)/a,(y_-y)*b))

   greater() 函数的输入是两个张量(维度相同) , 此函数会比较第一个输入张量和第二个和第二个输入张量相同位置的每一个元素大小,如果大于函数会返回True , 否则 返回 Fasle

where() 函数实现选择的功能。该函数有各个参数,第一个为选择条件,是一个 布尔类型的张量,当第一个参数是 True 时选择 第二个表达式, 否则选择第三个参数中的表达式。

import tensorflow as tf 
a = tf.constant([1.0,2.0,3.0,4.0])
b = tf.constant([6.0,5.0,4.0,3.0])

with tf.Session() as sess :
print(tf.greater(a,b).eval())

print(tf.where(tf.greater(a,b),a,b).eval())

 

举报

相关推荐

0 条评论