1 回答

TA貢獻1842條經驗 獲得超13個贊
我對Tensorflow教程中最近的這種方式感到非常驚訝,在模型的最后一層()中使用線性激活函數來分類問題,然后在損失函數中要求。我想原因是它可能會導致更好的數字穩定性,如文檔中所聲稱的那樣:Dense(1)from_logits=True
from_logits:是否解釋為對數值的張量。默認情況下,我們假設 包含概率(即 [0, 1] 中的值)。注意:使用可能數值更穩定。y_predy_predfrom_logits=True
其中 “by defaul” 表示此處損失函數參數的默認值為 。from_logits=False
無論如何,您最終得到了對logits的預測,而不是概率,就像迄今為止在類似教程(和實踐中)中通常的情況一樣。Logits的問題在于它們缺乏直觀的解釋,與概率預測相反。
你應該做的是從sigmoid函數傳遞你的logits,將它們轉換為概率:
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
前四個預測的示例:
preds = np.array([-1.7059733, -0.914219, 2.6422875, -0.50430596])
sigmoid(preds)
# array([0.15368673, 0.28613728, 0.93353404, 0.37652929])
然后將它們轉換為閾值為0.5的“硬”預測:
final_preds = [1 if x>0.5 else 0 for x in preds]
final_preds
# [0, 0, 1, 0]
在這種形式下,你可以將它們與基本事實進行比較。
但是,為了避免這種情況,我建議您考慮將最后一層更改為
Dense(1, activation='sigmoid')
并從損失定義中刪除該參數。這樣,就應該返回硬預測(未測試)。(from_logits=True)model.predict
添加回答
舉報