Tensorflow,在Tensorflow的sparse_categorical_crossentropy中,from_logits = True或False是什么意思?

13
在Tensorflow 2.0中,有一个称为{{loss function}}的损失函数。
tf.keras.losses.sparse_categorical_crossentropy(labels, targets, from_logits = False)

我能问一下,设置from_logits = True或False有什么区别吗? 我的猜测是,当传入的值是logits时,您设置from_logits = True,如果传入的值是概率(由softmax等输出),则将其设置为from_logits = False(这是默认设置)。
但是为什么?损失只是一些计算。为什么它需要根据传入的值而不同? 我还在谷歌的tensorflow教程中看到了这个问题https://www.tensorflow.org/alpha/tutorials/sequences/text_generation,即使最后一层的传入值是logits,它也没有将from_logits = True设置为True。 以下是代码
@tf.function
def train_step(inp, target):
  with tf.GradientTape() as tape:
    predictions = model(inp)
    loss = tf.reduce_mean(
        tf.keras.losses.sparse_categorical_crossentropy(target, predictions))
  grads = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(grads, model.trainable_variables))

  return loss

模型所在位置

 model = tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size, embedding_dim, 
                              batch_input_shape=[batch_size, None]),
    tf.keras.layers.LSTM(rnn_units, 
                        return_sequences=True, 
                        stateful=True, 
                        recurrent_initializer='glorot_uniform'),
    tf.keras.layers.Dense(vocab_size)
  ])

该模型没有最后一层softmax。(另外,在教程的另一个部分中,它将from_logits设置为True)

那么,我是否需要将其设置为True呢?


看起来他们已经在代码中添加了 from_logits=True - Saeed Masoomi
这可能会帮助您理解:https://dev59.com/4FMI5IYBdhLWcg3wCWwo - Deepak Sadulla
1个回答

11

Deepak提到的帖子有一些数学背景。

但是为了简化,from_logits=True意味着输入到交叉熵层的是普通的张量/logits,而如果from_logits=False,则意味着输入是一个概率值,通常你应该在最后一层使用softmax激活。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接