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自定义损失函数的更多相关文章

  1. tensorflow 自定义损失函数示例

    这个自定义损失函数的背景:(一般回归用的损失函数是MSE, 但要看实际遇到的情况而有所改变) 我们现在想要做一个回归,来预估某个商品的销量,现在我们知道,一件商品的成本是1元,售价是10元. 如果我们 ...

  2. TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵

    TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵 神经元模型:用数学公式比表示为:f(Σi xi*wi + b), f为激活函数 神经网络 是以神经元为基本单位构成的 激 ...

  3. 机器学习之路: tensorflow 自定义 损失函数

    git: https://github.com/linyi0604/MachineLearning/tree/master/07_tensorflow/ import tensorflow as tf ...

  4. Tensorflow 损失函数(loss function)及自定义损失函数(三)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/limiyudianzi/article ...

  5. tensorflow2 自定义损失函数使用的隐藏坑

    Keras的核心原则是逐步揭示复杂性,可以在保持相应的高级便利性的同时,对操作细节进行更多控制.当我们要自定义fit中的训练算法时,可以重写模型中的train_step方法,然后调用fit来训练模型. ...

  6. 吴裕雄 python 神经网络——TensorFlow 自定义损失函数

    import tensorflow as tf from numpy.random import RandomState batch_size = 8 x = tf.placeholder(tf.fl ...

  7. 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 ...

  8. Tensorflow%20实战Google深度学习框架 4.2.2 自定义损失函数源代码

    import os import tab import tensorflow as tf from numpy.random import RandomState print "hello ...

  9. pytorch自定义网络层以及损失函数

    转自:https://blog.csdn.net/dss_dssssd/article/details/82977170 https://blog.csdn.net/dss_dssssd/articl ...

随机推荐

  1. CSDN博客文章的备份及导出电子书CHM

    需要用到的工具集合下载:http://download.csdn.net/source/2881423 在CSDN.百度等写博客文章的应该很多,很多时候担心服务器有一天突然挂了,或者担心自己的号被封了 ...

  2. git 分支合并冲突

    准备新的feature1分支,继续我们的新分支开发 [root@node1 git]# git checkout -b feature1 D git/LICENSE.txt Switched to a ...

  3. 将远程git仓库里的指定分支拉取到本地(本地不存在的分支

    将远程git仓库里的指定分支拉取到本地(本地不存在的分支) https://www.cnblogs.com/hamsterPP/p/6810831.html

  4. [Python] 糗事百科文本数据的抓取

    [Python] 糗事百科文本数据的抓取 源码 https://github.com/YouXianMing/QiuShiBaiKeText import sqlite3 import time im ...

  5. Kubernetes中的亲和性与反亲和性

    通常情况下,Pod分配到哪些Node是不需要管理员操心的,这个过程会由scheduler自动实现.但有时,我们需要指定一些调度的限制,例如某些应用应该跑在具有SSD存储的节点上,有些应用应该跑在同一个 ...

  6. 安装NVIDIA驱动时禁用自带nouveau驱动

    安装英伟达驱动时,一般需要禁用自带nouveau驱动,按如下命令操作: sudo vim /etc/modprobe.d/blacklist-nouveau.conf 添加如下内容: blacklis ...

  7. 隐藏控件--HiddenField控件

    HiddenField控件百度查的结果(帮助大家对比理解): HiddenField控件顾名思义就是隐藏输入框的服务器控件,它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据.也许这个时候应 ...

  8. Can't get Kerberos realm

    1. Can't get Kerberos realm 原因分析: 原始代码为: org.apache.hadoop.security.UserGroupInformation.setConfigur ...

  9. Atlas+Keepalived系列一:安装Atlas:

    1:下载Atlas https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm 2:安装A ...

  10. android makefile文件批量拷贝文件的方法

    该方法是shell 和makefile组合使用 wallpapers := $(shell ls packages/apps/hyst_apps/NewBingoLauncher_C/default_ ...