3 回答

TA貢獻1784條經驗 獲得超7個贊
我讓它工作了。我所要做的就是將獲得的 preds 的數據類型preds = classifier.predict(test_set)
與我獲得的 true_labels 相匹配labels = test_set
。Preds 基本上是一個 numpy.ndarray 包含具有 np.float32 值的單個元素列表。將標簽轉換為相同的格式和形狀使 roc_curve 正常工作。
此外,我必須添加第三個變量閾值,fpr, tpr, threshold = roc_curve(true_labels, preds)
因此不會彈出 ValueError: too many values to unpack 錯誤。

TA貢獻1843條經驗 獲得超7個贊
實際上,如果查看 sklearn.metrics.roc_curve 的文檔(以及幾乎每個 sklearn 指標),他們不會將模型(圖像)的輸入作為參數,它只需要真實標簽和預測標簽。因此,在您對測試集進行推斷之后,在 keras 中(這里我只是猜測)類似于
preds = classifier.predict(batch)
您將 roc_curve 稱為
fpr, tpr = roc_curve(true_labels,preds)
可能你必須改變類型,因為它們是張量。
編輯:我已經檢查了 keras 文檔flow_from_directory
并產生了一個迭代器,(x,y) = (images,labels)
所以如果你想做某種訓練后分析,你應該使用這樣的東西來獲取標簽:
labels = [] for _,y in test_set: labels.extend(list(y))
如果您只有兩個類,請將 class_mode 更改為binary

TA貢獻2037條經驗 獲得超6個贊
要計算 ROC AUC,您需要分數,而不是最終分類/決策的結果。
classifier.add(Dense(units = 2, activation = 'softmax'))
由于您的模型有一個以兩個神經元( 所以,你不能將它與 softmax 一起使用。
您可以用一個神經元和 sigmoid 替換您的 2 個神經元和 softmax。然后,roc_curve
在二元分類問題中使用是安全的。
還有另一個名為roc_auc_score
的函數,它具有multi_class
將多類分類問題轉換為多個二元問題的參數。例如,auc_roc = roc_auc_score(labels, classifier.predict(...), multi_class='ovr')
。但是,這只會返回 AUC 分數,它不能幫助您繪制 ROC 曲線。
添加回答
舉報