在custom estimator中,输出图层没有激活。
logits = tf.layers.dense(net, params['n_classes'], activation=None)
然后使用sparse_softmax_cross_entropy
计算损失
loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
sparse_softmax_cross_entropy
表示使用softmax作为激活
计算损失时输出层的功能? 答案 0 :(得分:2)
基于它“天真地”计算softmax和交叉熵可能在数值上不稳定。这就是为什么建议不在输出层中激活(通常分类为tf.nn.softmax
)。相反,Tensorflow提供损失函数,例如sparse_softmax_cross_entropy
,它在内部应用softmax(以数字稳定的方式),然后根据它计算交叉熵。也就是说,您应该提供模型输出而不您自己的softmax(通常称为 logits )。
E.g。在API docs for the softmax op中,您通常可以找到诸如
之类的段落警告:此操作需要未缩放的日志,因为它会在内部执行logmax以提高效率。不要使用softmax的输出调用此op,因为它会产生不正确的结果。
答案 1 :(得分:0)