Tensorflow,from_logits = True or False 在 Tensorflow sparse_c



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

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

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

但为什么呢?损失只是一些计算。为什么它需要通过其传入值而有所不同?我也在谷歌的张量流教程中看到过https://www.tensorflow.org/alpha/tutorials/sequences/text_generation它没有设置 from_logits = True,即使最后一层的传入值是 logits。这是代码

@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)
  ])

它没有最后一层软最大值。(此外,在本教程的另一部分中,它设置为 from_logits = True(

那么,我是否将其设置为 True 并不重要吗?

迪帕克提到的帖子有一些数学背景。

但为了简单起见,from_logits=True 表示交叉熵层的输入是正常的张量/对数,而如果 from_logits=False,则表示输入是一个概率,通常你应该在最后一层有一些 softmax 激活。

最新更新