資料內(nèi)容:
對于每個樣本,模型都會返回一個包含 logits 或 log-odds 分?jǐn)?shù)的向量,每個類一
個。
predictions = model(x_train[:1]).numpy()
predictions
tf.nn.softmax 函數(shù)將這些 logits 轉(zhuǎn)換為每個類的概率:
tf.nn.softmax(predictions).numpy()
注:可以將 tf.nn.softmax 烘焙到網(wǎng)絡(luò)最后一層的激活函數(shù)中。雖然這可以使模型
輸出更易解釋,但不建議使用這種方式,因為在使用 softmax 輸出時不可能為
所有模型提供精確且數(shù)值穩(wěn)定的損失計算。
使用 losses.SparseCategoricalCrossentropy 為訓(xùn)練定義損失函數(shù),它會接受 logits
向量和 True 索引,并為每個樣本返回一個標(biāo)量損失。
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
此損失等于 true 類的負(fù)對數(shù)概率:如果模型確定類正確,則損失為零。
這個未經(jīng)訓(xùn)練的模型給出的概率接近隨機(jī)(每個類為 1/10),因此初始損失應(yīng)
該接近 -tf.math.log(1/10) ~= 2.3。
loss_fn(y_train[:1], predictions).numpy()