Tensorflow, что означает from_logits = True или False в sparse_categorical_crossentropy Tensorflow? - PullRequest
1 голос
/ 22 марта 2019

В Tensorflow 2.0, есть функция потерь, называемая

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

Могу я спросить вас, в чем разница между установкой from_logits = True или False? Я предположил, что когда входящие значения являются логитами, вы устанавливаете from_logits = True, а если входящие значения являются вероятностями (выводимыми softmax и т. Д.), То вы просто устанавливаете from_logits = False (это настройка по умолчанию).

Но почему? потеря - это просто расчет. Почему он должен отличаться своими входящими значениями? Я также видел в учебнике по тензорному потоку Google https://www.tensorflow.org/alpha/tutorials/sequences/text_generation что он не устанавливает 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)

Так, не имеет значения, установил ли я значение True или нет?

...