在卷积神经网络(张量流)中计算损失函数时如何获得预测?

时间:2019-02-02 17:45:04

标签: python tensorflow conv-neural-network prediction loss-function

我按照以下步骤构建了带有张量流的卷积神经网络: https://www.tensorflow.org/tutorials/estimators/cnn

我想用自己的损失函数计算损失,因此需要在每个训练步骤中获得每个班级的预测概率。 从Tensorflow教程中,我知道我可以得到这些出现概率与“tf.nn.softmax(logits)”,然而,这回报张量,我不知道如何从这个张量提取实际出现概率。谁能告诉我如何获得这些概率,以便计算损失函数?

1 个答案:

答案 0 :(得分:0)

这是计算softmax并随后获得概率的方法:

# Probabities for each element in the batch for each class.
softmax = tf.nn.softmax(logits, axis=1)
# For each element in the batch return the element that has the maximal probability
predictions = tf.argmax(softmax, axis=1)

但是,请注意,您不需要预测就可以计算损失函数,而需要实际概率。如果您要计算其他指标,则可以使用预测(指标,如准确性,准确性,召回率等)。 softmax Tensor包含每个类的实际概率。例如,假设您批次中有2个元素,并且试图从三个类别中预测一个,则softmax将为您提供以下信息:

# Logits with random numbers
logits = np.array([[24, 23, 50], [50, 30, 32]], dtype=np.float32)
tf.nn.softmax(logits, axis=1)
# The softmax returns
# [[5.1090889e-12 1.8795289e-12 1.0000000e+00]
#  [1.0000000e+00 2.0611537e-09 1.5229979e-08]]
# If we sum the probabilites for each batch they should sum up to one
tf.reduce_sum(softmax, axis=1)
# [1. 1.]

根据您对损失函数的想象,这应该是正确的:

first_second = tf.nn.l2_loss(softmax[0] - softmax[1])
first_third = tf.nn.l2_loss(softmax[0] - softmax[2])
divide_and_add_m = tf.divide(first_second, first_third) + m
loss = tf.maximum(0.0, 1 - tf.reduce_sum(divide_and_add_m))