机器学习之路: tensorflow 自定义 损失函数
git: https://github.com/linyi0604/MachineLearning/tree/master/07_tensorflow/
import tensorflow as tf
from numpy.random import RandomState '''
模拟一个回归案例
自定义一个损失函数为:
当真实值y_更大的时候 loss = a(y_ - y)
当预测值y更大的时候 loss = b(y - y_) loss_less = 10
loss_more = 1
loss = tf.reduce_sum(
tf.where(
tf.greater(y, y_),
(y - y_) * loss_more,
(y_ - y) * loss_less
)) tf.reduce_sum() 求平均数
tf.where(condition, a, b) condition为真时返回a 否则返回b
tf.grater(a, b) a>b时候返回真 否则返回假 ''' # 一批运算的数据数量
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") # 定义一个单层神经网络 前向传播的过程
# 权重变量 2*1维度 方差为1 均值为0 种子变量使得每次运行生成同样的随机数
w1 = tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1)) # 计算过程
y = tf.matmul(x, w1) # 自定义损失函数部分
loss_less = 10
loss_more = 1
loss = tf.reduce_sum(
tf.where(
tf.greater(y, y_),
(y - y_) * loss_more,
(y_ - y) * loss_less
)) # 训练内容 训练速度0.001 让loss最小
train_step = tf.train.AdamOptimizer(0.001).minimize(loss) # 生成随机数作为训练数据
rdm = RandomState(1)
dataset_size = 128
X = rdm.rand(dataset_size, 2)
# 预测的正确至设置为两个特征加和 加上一个噪音
# 不设置噪音 预测的意义就不大了
# 噪音设置为均值为0的极小量
Y = [[x1 + x2 + rdm.rand()/10.0-0.05] for (x1, x2) in X] # 开启会话训练
with tf.Session() as sess:
init_op = tf.initialize_all_variables()
sess.run(init_op)
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.019347 ]
[1.0428089]]
'''
41 # 自定义损失函数部分
42 loss_less = 10
43 loss_more = 1
44 loss = tf.reduce_sum(
45 tf.where(
46 tf.greater(y, y_),
47 (y - y_) * loss_more,
48 (y_ - y) * loss_less
49 )) 这里自定义损失的时候,如果结果少了损失权重为10, 多了损失权重为1
预测结果 w1 为 [[1.02],[1.04]] , 所以结果预测偏向多于x1+x2, 因为多的话,损失少
机器学习之路: tensorflow 自定义 损失函数的更多相关文章
- tensorflow 自定义损失函数示例
这个自定义损失函数的背景:(一般回归用的损失函数是MSE, 但要看实际遇到的情况而有所改变) 我们现在想要做一个回归,来预估某个商品的销量,现在我们知道,一件商品的成本是1元,售价是10元. 如果我们 ...
- 吴裕雄 python 神经网络——TensorFlow 自定义损失函数
import tensorflow as tf from numpy.random import RandomState batch_size = 8 x = tf.placeholder(tf.fl ...
- Tensorflow 损失函数(loss function)及自定义损失函数(三)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/limiyudianzi/article ...
- TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵
TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵 神经元模型:用数学公式比表示为:f(Σi xi*wi + b), f为激活函数 神经网络 是以神经元为基本单位构成的 激 ...
- tensflow自定义损失函数
tensflow 不仅支持经典的损失函数,还可以优化任意的自定义损失函数. 预测商品销量时,如果预测值比真实销量大,商家损失的是生产商品的成本:如果预测值比真实值小,损失的则是商品的利润. 比如如果一 ...
- tensorflow2 自定义损失函数使用的隐藏坑
Keras的核心原则是逐步揭示复杂性,可以在保持相应的高级便利性的同时,对操作细节进行更多控制.当我们要自定义fit中的训练算法时,可以重写模型中的train_step方法,然后调用fit来训练模型. ...
- Google机器学习课程基于TensorFlow : https://developers.google.cn/machine-learning/crash-course
Google机器学习课程基于TensorFlow : https://developers.google.cn/machine-learning/crash-course https ...
- 『NiFi 学习之路』自定义 —— 组件的自定义及使用
一.概述 许多业务仅仅使用官方提供的组件不能够满足性能上的需求,往往要通过高度可定制的组件来完成特定的业务需求. 而 NiFi 提供了自定义组件的这种方式. 二.自定义 Processor 占坑待续 ...
- WPF之路——实现自定义虚拟容器(实现VirtualizingPanel)
原文:WPF之路--实现自定义虚拟容器(实现VirtualizingPanel) 源码下载地址: http://download.csdn.net/detail/qianshen88/6618033 ...
随机推荐
- Python概念-迭代器的__iter__和__next__
大家都知道__iter__是可迭代对象和迭代器的独有方法,也知道__next__是迭代器的 既然已经学了面向对象了,那么如何自己写一个: 代码示例: # 编辑者:闫龙 class Range: def ...
- 凸包入门(Graham扫描法)(A - Wall POJ - 1113)
题目链接:https://cn.vjudge.net/contest/276359#problem/A 题目大意:有一个国王,要在自己的城堡周围建立围墙,要求围墙能把城堡全部围起来,并且围墙距离城堡的 ...
- static, const 和 static const 变量的初始化问题
const 常量的在超出其作用域的时候会被释放,但是 static 静态变量在其作用域之外并没有释放,只是不能访问. static 修饰的是静态变量,静态函数.对于类来说,静态成员和静态函数是属于整个 ...
- linux用户权限 -> 系统基本权限
比如rwxr-xr-x linux中正是这9个权限位来控制文件属主(User).属组(Group).其他用户(Other)基础权限. 用户对资源来说, 有三种角色 User(u): 属主用户(文件所有 ...
- linux文件管理 -> 系统文件属性
-rw-------. 1 root root 4434 May 30 13:58 ks.cfg -rw-------. ①:文件类型与权限 ②:硬链接次数 root ③:所属用户 root ④:所属 ...
- 关于 JVM 内存的 N 个问题(转)
JVM的内存区域是怎么划分的? JVM的内存划分中,有部分区域是线程私有的,有部分是属于整个JVM进程:有些区域会抛出OOM异常,有些则不会,了解JVM的内存区域划分以及特征,是定位线上内存问题的基础 ...
- java基础47 装饰着模式设计
1.装饰者模式 增强一个类的功能,而且还可以让这些装饰类相互装饰 2.装饰者设计模式的步骤 1.在装饰类的内部维护一个被装饰类的引用 2.让装饰者有一个共同的父类或者父接口 3.实例 packa ...
- 使用html+css+js实现日历与定时器,看看今天的日期和今天剩余的时间。
使用html+css+js实现日历与定时器,看看今天的日期和今天剩余的时间. 效果图: 哎,今天就又这么过去了,过的可真快 . 代码如下,复制即可使用: <!DOCTYPE html> & ...
- java 多线程总结篇3之——生命周期和线程同步
一.生命周期 线程的生命周期全在一张图中,理解此图是基本: 线程状态图 一.新建和就绪状态 当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时它和其他的Java对象一样,仅仅由Jav ...
- CF312B 【Archer】
容易算出这人第一次胜利的概率,第二次的,第三次的…… 好像可以无限乘下去 但是这题精度卡到1e-6 不妨设一个eps,当这次胜率小于eps时,就break掉,反正它已经不影响答案了 我设的是eps=1 ...