Tensorflow实现经典损失函数
来源:互联网 发布:mac配置jenkins 编辑:程序博客网 时间:2024/05/22 06:40
Tensorflow实现经典损失函数
神经网络模型的效果以及优化的目标是通过损失函数(Loss function)来定义的。如何判断一个输出向量和期望的向量有多接近呢?
交叉熵(cross entropy)
交叉熵刻画了两个概率分布之间的距离,它是分类问题中使用比较广的一种损失函数。给定两个概率分布p和q,通过q来表示p的交叉熵为:
如何将神经网络前向传播得到的结果也变成概率分布呢?Softmax回归就是一个非常常用的方法。
Softmax回归本身可以作为一个学习算法来优化分类结果,但在Tensorflow中,Softmax回归的参数被去掉了,它只是一层额外的处理层,将神经网络的输出变成一个概率分布。假设原始的神经网络的输出为
Tensorflow实现交叉熵
cross_entropy = -tf.reduce_mean( y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)))
其中y_代表正确结果,y代表预测结果,tf.clip_by_value函数可以将一个张量中的数值限制在一个范围之内,tf.log完成对张量中所有元素依次求对数,* 实现两个矩阵元素之间直接相乘(矩阵乘法需要使用tf.matmul函数来完成)。
因为交叉熵一般会与Softmax回归一起使用,所以Tensorflow对这两个功能进行了统一封装,并提供了tf.nn.softmax_cross_entropy_with_logits函数。比如可以直接通过下面的代码来实现使用了softmax回归之后的交叉熵损失函数:
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y, y_)
均方误差(MSE)
对于回归问题,最常用的损失函数是均方误差(MSE):
其中
mse = tf.reduce_mean(tf.square(y_ - y))
自定义损失函数
通过自定义损失函数的方法,我们可以使得神经网络优化的结果更加接近实际问题的需求。例如我们在预测商品销售问题中使用的损失函数:
在Tensorflow中可以通过以下代码实现这个损失函数:
loss = tf.reduce_sum(tf.select(tf.greater(v1, v2), (v1 - v2) * a, (v2-v1) * b))
tf.greater的输入是两个张量,此函数会比较这两个张量中每一个元素的大小,并返回比较结果。
tf.select函数有三个参数,第一个为选择条件,当选择条件为True时,tf.select函数会选择第二个参数中的值,否则使用第三个参数中的值。
在定义了损失函数之后,下面一个简单的神经网络程序来讲解如何利用自定义损失函数:
loss_less = 1loss_more = 10loss = 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)with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op) STEPS = 5000 for i in range(STEPS): start = (i*batch_size) % 128 end = (i*batch_size) % 128 + batch_size sess.run(train_step, feed_dict={x: X[start:end], y_: Y[start:end]}) if i % 1000 == 0: print("After %d training step(s), w1 is: " % (i)) print sess.run(w1), "\n" print "Final w1 is: \n", sess.run(w1)
- Tensorflow实现经典损失函数
- Tensorflow 损失函数定义
- TensorFlow损失函数专题
- TensorFlow自定义损失函数
- tensorflow中损失函数总结
- [tensorflow损失函数系列]sigmoid_cross_entropy_with_logits
- [tensorflow损失函数系列]weighted_cross_entropy_with_logits
- [tensorflow损失函数系列]softmax_cross_entropy_with_logits
- [tensorflow损失函数系列]sparse_softmax_cross_entropy_with_logits
- TensorFlow四种损失函数
- 10、TensorFLow 中的损失函数
- 8.2 TensorFlow实现KNN与TensorFlow中的损失函数,优化函数
- tensorflow学习笔记(三):损失函数
- tensorflow框架基础之损失函数
- TensorFlow损失函数(loss function)
- tensorflow: 损失函数(Losses Functions) 探究
- TensorFlow之损失函数、学习率、正则
- tensorflow求lost(cost)损失函数的几种典型实现方法
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- 插入排序(Insert-Sort)
- 10月10日 c语言 输入星星图形 1
- Linux中的用户管理
- java之用反射实现方法(已知实体对象和实体参数)
- Tensorflow实现经典损失函数
- spring和springmvc的关系
- [HDU 1502][动态规划]Regular Words
- RN新建项目ios执行analyzer issues
- andengine 精灵的水平翻转和上下翻转
- 【模拟】Codeforces Round #438 A. Bark to Unlock 题解
- 第三与第四次作业
- 学习笔记-图像识别(Photo OCR)
- 泛型总结