【问题标题】:Tensorflow, what does from_logits = True or False mean in sparse_categorical_crossentropy of Tensorflow?Tensorflow,Tensorflow的sparse_categorical_crossentropy中的from_logits = True or False是什么意思?
【发布时间】:2019-08-12 21:57:04
【问题描述】:

在 TensorFlow 2.0 中, 有一个损失函数叫做

tf.keras.losses.sparse_categorical_crossentropy(labels, targets, from_logits = False)

我能问你设置 from_logits = True 或 False 有什么区别吗? 我的猜测是,当传入值是 logits 时,您设置 from_logits = True,如果传入值是概率(由 softmax 等输出),那么您只需设置 from_logits = False(这是默认设置)。

但是为什么呢?损失只是一些计算。为什么它的传入值需要不同? 我也在google的tensorflow教程中看到 https://www.tensorflow.org/alpha/tutorials/sequences/text_generation 即使最后一层的传入值是 logits,它也不会设置 from_logits = 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)

那么,我设置它是否为真没有关系吗?

【问题讨论】:

标签: tensorflow loss-function cross-entropy


【解决方案1】:

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

但为简单起见,from_logits=True 表示 crossEntropy 层的输入是正常张量/logits,而如果 from_logits=False,则表示输入是概率,通常您应该在最后一层激活一些 softmax。

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2020-02-08
    • 2023-03-19
    相关资源
    最近更新 更多