在自定义估算器中,输出层没有激活。
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作为输出层的激活函数? “天真”地计算softmax和交叉熵在数值上可能不稳定。这就是为什么建议您在输出层中不要进行激活的原因(通常是tf.nn.softmax
用于分类)。相反,Tensorflow提供了损失函数,例如sparse_softmax_cross_entropy
在内部应用softmax(以数值稳定的方式),然后基于该函数计算交叉熵。也就是说,您应该提供没有自己的softmax(通常称为logits)的模型输出。
例如在softmax op的API文档中,您通常可以找到以下段落:
警告:此操作期望未缩放的logit,因为它在内部对logit执行softmax以提高效率。不要使用softmax的输出来调用该操作,因为这会产生错误的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句