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 ...
随机推荐
- Oracle 增加 修改 删除 列
语法结构如下: alter table tablename add (column datatype [default value][null/not null],….); alter table t ...
- C#高级编程9-第12章 动态语言扩展
C#高级编程9-第12章 动态语言扩展 dynamic t = new ExpandoObject(); t.Abc = "abc"; t.Value = ; Console.Wr ...
- 使用 IntraWeb (35) - TIWJQueryWidget
可有可无的东西, 因为没有它也可以方便达成其目的, 使用它貌似更形象一些; 也可以通过它调用其他 js 库. 利用类似手段, 有人推出了 CGDevTools; 它主要是利用 JQuery 扩展而成, ...
- poj 1184
经典的宽搜题目,感觉最好的办法应该是双向广搜. 不过用简单的启发式搜索可以飘过. #include <iostream> #include <cstdio> #include ...
- android: 碎片的demo
现在你已经将关于碎片的重要知识点都掌握得差不多了,不过在灵活运用方面可能还有 些欠缺,因此又该进入我们本章的最佳实践环节了. 前面有提到过,碎片很多时候都是在平板开发当中使用的,主要是为了解决屏幕空间 ...
- Unity3D光照前置知识——Rendering Paths(渲染路径)及LightMode(光照模式)译解
简述 Unity supports different Rendering Paths. You should choose which one you use depending on your g ...
- java异常中throw和throws的区别
throws和throwthrows:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁. 用在方法声明后面,跟的是异常类名 可以跟多个异常类名,用逗号隔开 表 ...
- Eclipse的预设的Include的路径
http://www.eclipse.org/community/eclipse_newsletter/2013/october/article4.php 说明链接 http://www.eclips ...
- 解决Gerrit的git unpack error问题
今天上午同事和我说neutron项目要换成全新的内部代码,原先仓库里的代码要全部废弃掉.于是我就简单地创建了一个空项目使用git push --force将其置空. 下午的时候,麻烦事情就来了,同事发 ...
- 【VSCode】Windows下VSCode便携式c/c++环境
http://blog.csdn.net/c_duoduo/article/details/52083494 Ver 1.1 完整版(修复mingw环境变量错误)下载: http://pan.baid ...