tf.nn.softmax_cross_entropy_with_logits()笔记及交叉熵
2017-12-07 15:50
477 查看
交叉熵
交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。交叉熵作为损失函数还有一个好处是使用sigmoid函数在梯度下降时能避免均方误差损失函数学习速率降低的问题,因为学习速率可以被输出的误差所控制。tensorflow中自带的函数可以轻松的实现交叉熵的计算。
tf.nn.softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, dim=-1, name=None)
Computes softmax cross entropy between logits and labels.
注意:如果labels的每一行是one-hot表示,也就是只有一个地方为1,其他地方为0,可以使用tf.sparse_softmax_cross_entropy_with_logits()
警告:
1. 这个操作的输入logits是未经缩放的,该操作内部会对logits使用softmax操作
2. 参数labels,logits必须有相同的形状 [batch_size, num_classes] 和相同的类型(float16, float32, float64)中的一种
参数:_sentinel: 一般不使用
labels: labels的每一行labels[i]必须为一个概率分布
logits: 未缩放的对数概率
dims: 类的维度,默认-1,也就是最后一维
name: 该操作的名称
返回值:长度为batch_size的一维Tensor
下面用个小例子来看看该函数的用法
import tensorflow as tf labels = [[0.2,0.3,0.5], [0.1,0.6,0.3]] logits = [[2,0.5,1], [0.1,1,3]] logits_scaled = tf.nn.softmax(logits) result1 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits) result2 = -tf.reduce_sum(labels*tf.log(logits_scaled),1) result3 = tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits_scaled) with tf.Session() as sess: print sess.run(result1) print sess.run(result2) print sess.run(result3) >>>[ 1.41436887 1.66425455] >>>[ 1.41436887 1.66425455] >>>[ 1.17185783 1.17571414]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上述例子中,labels的每一行是一个概率分布,而logits未经缩放(每行加起来不为1),我们用定义法计算得到交叉熵result2,和套用tf.nn.softmax_cross_entropy_with_logits()得到相同的结果, 但是将缩放后的logits_scaled输tf.nn.softmax_cross_entropy_with_logits(), 却得到错误的结果,所以一定要注意,这个操作的输入logits是未经缩放的
下面来看tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None, labels=None, logits=None, name=None)
这个函数与上一个函数十分类似,唯一的区别在于labels.
注意:对于此操作,给定标签的概率被认为是排他的。labels的每一行为真实类别的索引
警告:
1. 这个操作的输入logits同样是是未经缩放的,该操作内部会对logits使用softmax操作
2. 参数logits的形状 [batch_size, num_classes] 和labels的形状[batch_size]
返回值:长度为batch_size的一维Tensor, 和label的形状相同,和logits的类型相同
import tensorflow as tf labels = [0,2] logits = [[2,0.5,1], [0.1,1,3]] logits_scaled = tf.nn.softmax(logits) result1 = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits) with tf.Session() as sess: print sess.run(result1) >>>[ 0.46436879 0.17425454]
相关文章推荐
- tf.nn.softmax_cross_entropy_with_logits()笔记及交叉熵
- tensorflow 笔记10:tf.nn.sparse_softmax_cross_entropy_with_logits 函数
- TensorFlow学习笔记之tf.nn.softmax()与tf.nn.softmax_cross_entropy_with_logits的用法
- TensorFlow中的tf.nn.softmax_cross_entropy_with_logits 交叉熵 损失函数
- 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
- TensorFlow学习--tf.nn.sparse_softmax_cross_entropy_with_logits
- 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
- 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
- tf.nn.sparse_softmax_cross_entropy_with_logits
- 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
- 对比两个函数tf.nn.softmax_cross_entropy_with_logits和tf.nn.sparse_softmax_cross_entropy_with_logits
- tf.nn.softmax_cross_entropy_with_logits
- tf.nn.softmax_cross_entropy_with_logits()
- tf.nn.sparse_softmax_cross_entropy_with_logits()
- 【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法
- [TensorFlow] tf.nn.softmax_cross_entropy_with_logits的用法
- tf.nn.sparse_softmax_cross_entropy_with_logits
- tf.nn.sparse_softmax_cross_entropy_with_logits的用法
- tf.nn.softmax_cross_entropy_with_logits
- TensorFlow 介绍 tf.nn.softmax_cross_entropy_with_logits 的用法