#科技新星創作營# #機器學習# #深度學習# #神經網絡#
背景介紹
最近在用keras寫模型的時候,參考別人代碼時,經常能看到各種不同的metrics,因此會產生這麼幾個問題:
metrics評價都對哪些指標進行評價?為什麼要在模型中定義這些指標呢?為什麼能在模型中定義多個指標?model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['mae', 'acc'])
理解metrics
想要理解metrics,最好先理解什麼是loss function。
神經網絡的訓練大多是採用梯度法,通過一個迭代的過程不斷降低損失函數的值。
損失應該有兩個重要的屬性:
它的值越小,模型越適合數據;它應該是可微的。因此,知道了這一點,我們就完全可以定義度量是什麼:
它是一個函數,輸入模型對實例的預測值和實例真值,輸出則是一個可度量的模型"適合度"指標值。
所以,loss function是一個度量,但它並不總是成立的。
為了理解這些差異,讓我們看看度量metrics使用的最常見示例:
使用不可微函數衡量神經網絡模型的性能:例如,當準確度accuracy是不可微的(甚至不連續),因此我們無法直接用它來優化網絡。但是,我們可以使用它來選擇具有最佳精度的模型。當模型的最終損失是幾個損失函數的組合時,可以用metrics來獲得不同損失函數的值。假設損失裡有一個正則化項來計算模型權重與0的差異(l1正則或l2正則),以及一個衡量你的模型適合度的項。在這種情況下,我們便可以使用度量來單獨跟蹤模型在各個時期的適應度是如何變化的。跟蹤一個我們不想直接參與模型優化的度量:假設我們正在解決一個多維回歸問題,其中我們最關心的是mse,但同時我們對模型在問題上的解的餘弦距離隨時間的變化也感興趣。那麼,我們便使可以用metrics啦。上面便解釋清楚了度量的用途,以及為什麼可以在一個模型中使用多個度量。
在keras中metrics使用的機制
現在,讓我們來談談metrics在keras的使用機制。
訓練時有兩種計算方法:
在編譯時定義metrics:在上面代碼中,keras為代碼中定義的每個度量都會定義一個單獨的張量,以便在訓練時計算它。這通常會使計算速度更快,但這也需要額外的編譯。這裡的度量應該根據keras.backend函數來定義。使用keras.callback:我們也可以使用回調來計算度量。由於每個回調都有model的默認屬性,因此在訓練過程中,我們可以使用model.predict或模型參數來計算各種metrics。此外,它使計算方式更加靈活,不僅可以按batch-wise計算,也可以按照batch-wise、train-wise計算。不過這種方式會帶來較慢的計算速度和更複雜的邏輯——因為metrics需要我們自己定義。可用度量metrics列表
大家可以在 https://keras.io/api/metrics/ 進行詳細查看。
Accuracy metrics
Accuracy classBinaryAccuracy classCategoricalAccuracy classTopKCategoricalAccuracy classSparseTopKCategoricalAccuracy classProbabilistic metrics
BinaryCrossentropy classCategoricalCrossentropy classSparseCategoricalCrossentropy classKLDivergence classPoisson classRegression metrics
MeanSquaredError classRootMeanSquaredError classMeanAbsoluteError classMeanAbsolutePercentageError classMeanSquaredLogarithmicError classCosineSimilarity classLogCoshError classClassification metrics based on True/False positives & negatives
AUC classPrecision classRecall classTruePositives classTrueNegatives classFalsePositives classFalseNegatives classPrecisionAtRecall classSensitivityAtSpecificity classSpecificityAtSensitivity classImage segmentation metrics
MeanIoU classHinge metrics for "maximum-margin" classification
Hinge classSquaredHinge classCategoricalHinge class