為什麼tf模型訓練過程中的二元交叉熵損失與sklearn計算的不同?

傑里米

我正在使用 tensorflow 構建一個神經協同過濾推薦模型,使用二元交叉熵作為損失函數。要預測的標籤當然是二元的。

在訓練每個 epoch 時,會打印損失函數。我有一個 for 循環,它通過 epoch 訓練模型 epoch,然後使用該當前狀態的模型來預測測試標籤,並使用 sci-kit learn 的 log_loss 函數再次計算損失。

我注意到 tensorflow 計算的損失(由 loss: 顯示)始終高於 sklearn 計算的損失(由 train_loss 顯示:): 在此處輸入圖片說明

這是因為這兩個函數所涉及的數學略有不同嗎?

尼古拉斯·熱維斯

在訓練循環中,Keras 測量整個 epoch 的平均損失。在此期間,模型會進行調整和改進,因此當一個 epoch 結束時,報告的損失是對當時損失的高估(假設模型仍在學習)。使用sklearn,您只計算 epoch 結束時的損失,模型與 epoch 結束時一樣。如果模型仍在學習,則損失sklearn會略低,因為它只看到在 epoch 中調整過的模型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Keras:加权二元交叉熵

Keras在二元分类模型中的类权重

Keras Tensorflow二元交叉熵损失大于1

keras分类和二元交叉熵

二元和分类交叉熵的结果不同

使用二元交叉熵时输入和输出形状不匹配 | Keras tf 自编码器

如何在 keras 中创建自定义损失函数?(自定义加权二元交叉熵)

使用二元交叉熵作为损失解释 DNN 的输出

二元交叉熵输出,如何读取输出?

為什麼 Thread.activeCount() 計算的線程數比我的代碼創建的多?

在二元搜索中,為什麼做 mid = (left + (right - left)) // 2 比 mid = (left + right) // 2 好?

為什麼枚舉中不允許計算值?

我什麼時候應該訓練自己的模型,什麼時候應該使用預訓練的模型?

有什麼辦法可以為CuPy計算設置線程數、塊數和網格數?如何?

為什麼我的 CloudWatch 計數與 AWS API Gateway 錯誤計數不同?

為什麼 char 文字的 sizeof 與 sizeof(char) 不同?

為什麼 Python 在計算中將精確小數轉換為近似值?

為什麼 sklearn 中邏輯回歸的等效 class_weights 會產生不同的結果?

為什麼模運算符在 javscript 的 FOR 循環中的工作方式不同?

當我包含驗證數據時,為什麼模型訓練花費的時間要長得多?

如果通過引用傳遞,一元和二元運算參數的參數是否保證與原始數據相同?

為什麼 C 程序跳過我的 if 循環來編程 raspberrypi?

為什麼不計算反應

為什麼在訓練模型之前應用交叉驗證

使用各種損失函數評估預訓練的 Tensorflow keras 模型

為什麼 pprint 顯示與打印不同的類?

Pytorch - 跳過計算每個時期的預訓練模型的特徵

uint:為什麼 -(a*b) 與 -a*b 不同

為什麼 tr 與 é 一起失敗?