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

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

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

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

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

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

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

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

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

  5. tensflow自定义损失函数

    tensflow 不仅支持经典的损失函数,还可以优化任意的自定义损失函数. 预测商品销量时,如果预测值比真实销量大,商家损失的是生产商品的成本:如果预测值比真实值小,损失的则是商品的利润. 比如如果一 ...

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

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

  7. Google机器学习课程基于TensorFlow : https://developers.google.cn/machine-learning/crash-course

    Google机器学习课程基于TensorFlow  : https://developers.google.cn/machine-learning/crash-course         https ...

  8. 『NiFi 学习之路』自定义 —— 组件的自定义及使用

    一.概述 许多业务仅仅使用官方提供的组件不能够满足性能上的需求,往往要通过高度可定制的组件来完成特定的业务需求. 而 NiFi 提供了自定义组件的这种方式. 二.自定义 Processor 占坑待续 ...

  9. WPF之路——实现自定义虚拟容器(实现VirtualizingPanel)

    原文:WPF之路--实现自定义虚拟容器(实现VirtualizingPanel) 源码下载地址: http://download.csdn.net/detail/qianshen88/6618033 ...

随机推荐

  1. Oracle错误: ORA-01722 无效数字

    ORA-01722: 无效数字 主要原因是: 1.对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作; 2.两个类型不匹配的值进行比较操作(例如,"="); ...

  2. SQL select语句执行顺序

    sql查询原理和Select执行顺序 关键字: 数据库 一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是 ...

  3. 【黑客免杀攻防】读书笔记18-最终章Anti Rootkit

    1.免杀技巧的遏制 1.1.PE文件 入口点不在第一个区段或在最后一个区段 入口点处代码附近只有一小段代码 入口点在正常范围之外 入口点为一个无效的值,实际入口点为TLS的入口点 区段名重复或者不属于 ...

  4. Python标准库笔记(9) — functools模块

    functools 作用于函数的函数 functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们. 装饰器 partial 类是 functools 模块提供的主要工具, ...

  5. 为什么使用do{}while(0)来进行宏定义

    最近发现很多代码在进行宏定义的时候使用喜欢使用 #define MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下几个原因:   1,空的宏定义避 ...

  6. spin_lock & mutex_lock的区别? 【转】

    转自:http://blog.csdn.net/wilsonboliu/article/details/19190861 本文由该问题引入到内核锁的讨论,归纳如下   为什么需要内核锁? 多核处理器下 ...

  7. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  8. ModelState验证部分属性

    ModelState.Remove("Name") 去掉不需要验证的属性.

  9. 三、springcloud之服务调用Feign

    一.背景 项目中接口调用: Httpclient Okhttp Httpurlconnection RestTemplate 微服务提供了更简单,方便的Feign 二.Feign简介 Feign是一个 ...

  10. 数据库-mysql数据库和表操作

    一:数据库查询增加删除 1)mysql数据库查询:show databases MariaDB [mysql]> show databases; +--------------------+ | ...