tensflow自定义损失函数
tensflow 不仅支持经典的损失函数,还可以优化任意的自定义损失函数。
预测商品销量时,如果预测值比真实销量大,商家损失的是生产商品的成本;如果预测值比真实值小,损失的则是商品的利润。
比如如果一个商品的成本是1元,但利润是10元,那么少预测一个就少赚9元;而多预测一个才亏1元,为了最大化利润预期,需要将损失函数和利润直接联系起来。注意损失函数
定义的是损失,所以要将利润最大化,定义的损失函数应该刻成本或者代价。下面给出了一个当预测多于真实值和预测少于真实值时有不同损失系数和损失函数:
import tensorflow as tf
from numpy.random import RandomState
batch_size=
x=tf.placeholder(tf.float32,shape=(None,),name='x-input')
y_=tf.placeholder(tf.float32,shape=(None,),name='y-input') w1=tf.Variable(tf.random_normal([,],stddev=,seed=))
y=tf.matmul(x,w1)
logss_less=
logss_more=1
# 损失函数
logss=tf.reduce_sum(tf.where(tf.greater(y,y_),
(y-y_)*logss_more,
(y_-y)*logss_less))
train_step=tf.train.AdamOptimizer(0.001).minimize(logss) rdm=RandomState()
dataset_size=
X=rdm.rand(dataset_size,) Y=[[x1 +x2+rdm.rand()/10.0-0.05] for (x1,x2) in X]
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
STEPS=
for i in range(STEPS):
start=(i*batch_size) %dataset_size
end=min(start+batch_size,dataset_size)
sess.run(train_step,
feed_dict={x:X[start:end],y_:Y[start:end]}
)
print sess.run(w1)
结果为...
[[1.0194283]
[1.0428752]]
[[1.0194151]
[1.0428821]]
[[1.019347 ]
[1.0428089]]
所以预测函数的值是1.02x1+1.04x2,这要比x1+x2大,因为在损失函数中指定预测少了的损失(logss_less>loss_more.如果将log_less的值调整为1,log_more的值调整为10,
那么结果将会如下
...
[[0.95491844]
[0.9814671 ]]
[[0.95506585]
[0.98148215]]
[[0.9552581]
[0.9813394]]
也就是说,在这样的设置下,模型会更加偏向于预测少一点,而如果使用均方误差作为损失函数,那么w1会是[0.97437561,1.0243336],使用这个损失函数会尽量让预测值
离标准答案更近。通过这个样例可以看出,对于相同的神经网络,不同的损失函数会对训练得到的模型产生重要影响。
tensflow自定义损失函数的更多相关文章
- tensorflow 自定义损失函数示例
这个自定义损失函数的背景:(一般回归用的损失函数是MSE, 但要看实际遇到的情况而有所改变) 我们现在想要做一个回归,来预估某个商品的销量,现在我们知道,一件商品的成本是1元,售价是10元. 如果我们 ...
- TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵
TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵 神经元模型:用数学公式比表示为:f(Σi xi*wi + b), f为激活函数 神经网络 是以神经元为基本单位构成的 激 ...
- 机器学习之路: tensorflow 自定义 损失函数
git: https://github.com/linyi0604/MachineLearning/tree/master/07_tensorflow/ import tensorflow as tf ...
- Tensorflow 损失函数(loss function)及自定义损失函数(三)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/limiyudianzi/article ...
- tensorflow2 自定义损失函数使用的隐藏坑
Keras的核心原则是逐步揭示复杂性,可以在保持相应的高级便利性的同时,对操作细节进行更多控制.当我们要自定义fit中的训练算法时,可以重写模型中的train_step方法,然后调用fit来训练模型. ...
- 吴裕雄 python 神经网络——TensorFlow 自定义损失函数
import tensorflow as tf from numpy.random import RandomState batch_size = 8 x = tf.placeholder(tf.fl ...
- keras 中如何自定义损失函数
http://lazycoderx.com/2016/10/09/keras%E4%BF%9D%E5%AD%98%E6%A8%A1%E5%9E%8B%E6%97%B6%E4%BD%BF%E7%94%A ...
- Tensorflow%20实战Google深度学习框架 4.2.2 自定义损失函数源代码
import os import tab import tensorflow as tf from numpy.random import RandomState print "hello ...
- pytorch自定义网络层以及损失函数
转自:https://blog.csdn.net/dss_dssssd/article/details/82977170 https://blog.csdn.net/dss_dssssd/articl ...
随机推荐
- Minor GC 与Full GC有什么不一样
新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也非常快 老年代GC(Major GC/Full GC ...
- C++学习笔记43:STL
STL简介(standard Template Library) STL的基本组件:容器(container),迭代器(iterator),函数对象(function object) 算法(algor ...
- SpringMVC统一转换null值为空字符串的方法
在SpringMVC中,可以通过在<mvc:annotation-driven>中配置<mvc:message-converters>,把null值统一转换为空字符串,解决这个 ...
- C#后台解析 json 动态解析 通用(Dictionary)
Dictionary<string, object> suggestions = JSONSerializer.Deserialize<Dictionary<string, o ...
- java判断传进来的是否是图片
public static void main(String[] args) throws IOException { String filePath = "C:\\Users\\80975 ...
- ToolTip C#
yourToolTip = new ToolTip(); //The below are optional, of course, yourToolTip.ToolTipIcon = ToolTipI ...
- PHP内置的预定义常量大全
URL:http://www.php.net/manual/en/reserved.constants.php 预定义常量:核心预定义常量,标准预定义常量----------------------- ...
- python 常见问题
C:\Users\user\AppData\Local\Programs\Python\Python36\Scripts\ C:\Users\user\AppData\Local\Programs\P ...
- (转)Unity3D - 动作动画忽略timeScale
转自:http://blog.csdn.net/ynnmnm/article/details/46866347 最近在调战斗时的动画与特效,Unity3D对加/减速提供了Time.timeScale支 ...
- APICloud和海马玩模拟器结合调试手机页面
https://blog.csdn.net/pleasecallme_522/article/details/54577904