Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow,在Tensorflow的稀疏分类交叉熵中,logits=True或False表示什么?_Tensorflow_Loss Function_Cross Entropy - Fatal编程技术网

Tensorflow,在Tensorflow的稀疏分类交叉熵中,logits=True或False表示什么?

Tensorflow,在Tensorflow的稀疏分类交叉熵中,logits=True或False表示什么?,tensorflow,loss-function,cross-entropy,Tensorflow,Loss Function,Cross Entropy,在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(这是默认设置)

在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(这是默认设置)

但是为什么呢?损失只是一些计算。为什么它需要因其传入值而有所不同? 我还看到了谷歌的tensorflow教程 即使最后一层的传入值是logits,它也不会从_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的最后一层。 (另外,在本教程的另一部分中,它是从_logits=True设置的)


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

上面提到的博文迪帕克有一些数学背景


但为了简单起见,from_logits=True意味着交叉熵层的输入是正态张量/logits,而如果from_logits=False,则意味着输入是一种概率,通常您应该在最后一层中激活softmax。

似乎他们已经在代码中添加了
from_logits=True
。这可能有助于您理解: