卷积的tensorflow教程,logit的比例

时间:2016-06-10 11:02:12

标签: tensorflow convolution

我正在尝试通过向cifar10.py添加一些代码来编辑我自己的模型,这就是问题。

在cifar10.py中,[tutorial] [1]说:

  

练习:推理的输出是非规范化的logits。尝试使用tf.nn.softmax()编辑网络体系结构以返回标准化预测。

所以我直接输入" local4"的输出。到tf.nn.softmax()。这给了我 scaled logits,这意味着所有logits的总和是1.

但是在loss函数中,cifar10.py代码使用:

tf.nn.sparse_softmax_cross_entropy_with_logits()

并且该功能的描述说

  

警告:此操作需要未缩放的日志记录,因为它会在内部执行logmax以提高效率。不要使用softmax的输出调用此op,因为它会产生不正确的结果。

另外,根据描述,作为上述函数输入的logits必须具有[batch_size,num_classes]形状,这意味着logits应该是未缩放的softmax,就像示例代码计算unnormalized softmaxlogit一样。

  # softmax, i.e. softmax(WX + b)
  with tf.variable_scope('softmax_linear') as scope:
    weights = _variable_with_weight_decay('weights', [192, NUM_CLASSES],
                                          stddev=1/192.0, wd=0.0)
    biases = _variable_on_cpu('biases', [NUM_CLASSES],
                              tf.constant_initializer(0.0))
    softmax_linear = tf.add(tf.matmul(local4, weights), biases, name=scope.name)
    _activation_summary(softmax_linear)

这是否意味着我不必在代码中使用tf.nn.softmax

1 个答案:

答案 0 :(得分:5)

如果需要,您可以在代码中使用tf.nn.softmax,但是您必须自己计算损失:

softmax_logits = tf.nn.softmax(logits)
loss = tf.reduce_mean(- labels * tf.log(softmax_logits) - (1. - labels) * tf.log(1. - softmax_logits))

在实践中,您不能使用tf.nn.softmax来计算损失。但是,如果您想计算算法的预测并将它们与真实标签进行比较(以计算准确性),则需要使用tf.nn.softmax