tensorflow 自定义损失函数示例代码


Posted in Python onFebruary 05, 2020

这个自定义损失函数的背景:(一般回归用的损失函数是MSE, 但要看实际遇到的情况而有所改变)

我们现在想要做一个回归,来预估某个商品的销量,现在我们知道,一件商品的成本是1元,售价是10元。

如果我们用均方差来算的话,如果预估多一个,则损失一块钱,预估少一个,则损失9元钱(少赚的)。

显然,我宁愿预估多了,也不想预估少了。

所以,我们就自己定义一个损失函数,用来分段地看,当yhat 比 y大时怎么样,当yhat比y小时怎么样。

(yhat沿用吴恩达课堂中的叫法)

import tensorflow as tf
from numpy.random import RandomState
batch_size = 8
# 两个输入节点
x = tf.placeholder(tf.float32, shape=(None, 2), name="x-input")
# 回归问题一般只有一个输出节点
y_ = tf.placeholder(tf.float32, shape=(None, 1), name="y-input")
# 定义了一个单层的神经网络前向传播的过程,这里就是简单加权和
w1 = tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1))
y = tf.matmul(x, w1)
# 定义预测多了和预测少了的成本
loss_less = 10
loss_more = 1
#在windows下,下面用这个where替代,因为调用tf.select会报错
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_)*loss_more, (y_-y)*loss_less))
train_step = tf.train.AdamOptimizer(0.001).minimize(loss)
#通过随机数生成一个模拟数据集
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size, 2)
"""
设置回归的正确值为两个输入的和加上一个随机量,之所以要加上一个随机量是
为了加入不可预测的噪音,否则不同损失函数的意义就不大了,因为不同损失函数
都会在能完全预测正确的时候最低。一般来说,噪音为一个均值为0的小量,所以
这里的噪音设置为-0.05, 0.05的随机数。
"""
Y = [[x1 + x2 + rdm.rand()/10.0-0.05] for (x1, x2) in X]
with tf.Session() as sess:
 init = tf.global_variables_initializer()
 sess.run(init)
 steps = 5000
 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.01934695]
[ 1.04280889]

最终结果如上面所示。

因为我们当初生成训练数据的时候,y是x1 + x2,所以回归结果应该是1,1才对。
但是,由于我们加了自己定义的损失函数,所以,倾向于预估多一点。

如果,我们将loss_less和loss_more对调,我们看一下结果:

[[ 0.95525807]
[ 0.9813394 ]]

通过这个例子,我们可以看出,对于相同的神经网络,不同的损失函数会对训练出来的模型产生重要的影响。

引用:以上实例为《Tensorflow实战 Google深度学习框架》中提供。

总结

以上所述是小编给大家介绍的tensorflow 自定义损失函数示例,希望对大家有所帮助!

Python 相关文章推荐
python将html转成PDF的实现代码(包含中文)
Mar 04 Python
python算法学习之基数排序实例
Dec 18 Python
python求素数示例分享
Feb 16 Python
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 Python
在django admin中添加自定义视图的例子
Jul 26 Python
Python的垃圾回收机制详解
Aug 28 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
python爬虫工具例举说明
Nov 30 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 #Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 #Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 #Python
解决Tensorflow 内存泄露问题
Feb 05 #Python
TensorFlow实现指数衰减学习率的方法
Feb 05 #Python
关于Tensorflow使用CPU报错的解决方式
Feb 05 #Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 #Python
You might like
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
详解Python爬虫的基本写法
2016/01/08 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
户外拓展活动方案
2014/02/11 职场文书
租房协议书样本
2014/08/20 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
2016银行求职自荐信
2016/01/28 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电