dan*_*451 99 neural-network tensorflow softmax cross-entropy
我最近遇到了tf.nn.sparse_softmax_cross_entropy_with_logits,我无法弄清楚与tf.nn.softmax_cross_entropy_with_logits相比有什么不同.
是训练矢量唯一的区别y
必须是独热编码使用时sparse_softmax_cross_entropy_with_logits
?
阅读API,我找不到任何其他差异softmax_cross_entropy_with_logits
.但是为什么我们需要额外的功能呢?
如果提供单热编码训练数据/向量,不应softmax_cross_entropy_with_logits
产生相同的结果sparse_softmax_cross_entropy_with_logits
吗?
Oli*_*rot 166
具有两种不同的功能是方便的,因为它们产生相同的结果.
区别很简单:
sparse_softmax_cross_entropy_with_logits
,标签必须具有[batch_size]形状和dtype int32或int64.每个标签都是范围内的int [0, num_classes-1]
.softmax_cross_entropy_with_logits
,标签必须具有[batch_size,num_classes]和dtype float32或float64的形状.使用的标签是用于的标签softmax_cross_entropy_with_logits
的一个热门版本sparse_softmax_cross_entropy_with_logits
.
另一个微小的区别是sparse_softmax_cross_entropy_with_logits
,你可以给-1作为标签,0
在这个标签上有损失.
Dra*_*ag0 24
我想在TF文档中添加2个接受答案的内容.
第一:
tf.nn.softmax_cross_entropy_with_logits
注意:虽然这些类是互斥的,但它们的概率不一定是.所需要的只是每行标签是有效的概率分布.如果不是,则梯度的计算将是不正确的.
第二:
tf.nn.sparse_softmax_cross_entropy_with_logits
注意:对于此操作,给定标签的概率被视为独占.也就是说,不允许使用软类,并且标签向量必须为每行logits(每个小批量条目)的真实类提供单个特定索引.
Sal*_*ali 21
两个函数都计算相同的结果,sparse_softmax_cross_entropy_with_logits直接在稀疏标签上计算交叉熵,而不是使用单热编码转换它们.
您可以通过运行以下程序来验证这一点:
import tensorflow as tf
from random import randint
dims = 8
pos = randint(0, dims - 1)
logits = tf.random_uniform([dims], maxval=3, dtype=tf.float32)
labels = tf.one_hot(pos, dims)
res1 = tf.nn.softmax_cross_entropy_with_logits( logits=logits, labels=labels)
res2 = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=tf.constant(pos))
with tf.Session() as sess:
a, b = sess.run([res1, res2])
print a, b
print a == b
Run Code Online (Sandbox Code Playgroud)
在这里,我创建一个logits
长度随机向量dims
并生成一个热编码标签(其中元素pos
为1,其他为0).
之后我计算softmax和稀疏softmax并比较它们的输出.尝试重新运行几次以确保它始终产生相同的输出
归档时间: |
|
查看次数: |
50211 次 |
最近记录: |