pytorch loss函數整理

變量名解釋

logits:未經過normalize(未經過激活函數處理)的原始分數,例如一個mlp將特征映射到num_target_class維的輸出tensor就是logits。
probs:probabilities的簡寫,logits經過sigmoid函數,就變成了分布在0-1之間的概率值probs。

Binary Cross-Entropy Loss

Binary Cross-Entropy Loss,簡稱為BCE loss,即二元交叉熵損失。

二元交叉熵損失是一種用于二分類問題的損失函數。它衡量的是模型預測的概率分布與真實標簽的概率分布之間的差異。在二分類問題中,每個樣本的標簽只有兩種可能的狀態,通常表示為 0(負類)和 1(正類)。

其公式為:

BCE?Loss? = ? 1 N ∑ i = 1 N [ y i log ? ( p i ) + ( 1 ? y i ) log ? ( 1 ? p i ) ] \text { BCE Loss }=-\frac{1}{N} \sum_{i=1}^N\left[y_i \log \left(p_i\right)+\left(1-y_i\right) \log \left(1-p_i\right)\right] ?BCE?Loss?=?N1?i=1N?[yi?log(pi?)+(1?yi?)log(1?pi?)]
其中:

  • N N N是數據集的樣本數量。
  • y i y_i yi?是第 i {i} i個樣本的真實標簽,取值為 0 或 1,即第 i {i} i個樣本要么屬于類別 0(負類),要么屬于類別 1(正類)。
  • p i p_i pi?是第 i {i} i個樣本屬于類別 1(正類)的概率
  • log ? \log log是是自然對數。

當真實標簽 y i = 1 y_i=1 yi?=1 時,損失函數的第一部分 y i log ? ( p i ) y_i \log \left(p_i\right) yi?log(pi?) 起作用,第二部分為 0 。此時, 如果預測概率 p i p_i pi? 接近 1 (接近真實標簽 y i = 1 y_i=1 yi?=1), 那么 log ? ( p i ) \log \left(p_i\right) log(pi?) 接近 0 , 損失較小;如果 p i p_i pi? 接近 0 (即模型預測錯誤),那么 log ? ( p i ) \log \left(p_i\right) log(pi?) 會變得成絕對值很大的負數,導致取反后loss很大。

當真實標簽 y i = 0 y_i=0 yi?=0 時,損失函數的第二部分 ( 1 ? y i ) log ? ( 1 ? p i ) \left(1-y_i\right) \log \left(1-p_i\right) (1?yi?)log(1?pi?)起作用,第一部分為 0。此時,預測概率 p i p_i pi?越接近于 0,整體loss越小。

Pytorch手動實現

import torch
import torch.nn.functional as Fdef manual_binary_cross_entropy_with_logits(logits, targets):# 使用 Sigmoid 函數將 logits 轉換為概率probs = torch.sigmoid(logits)# 計算二元交叉熵損失loss = - torch.mean(targets * torch.log(probs) + (1 - targets) * torch.log(1 - probs))return loss# logits和targets可以是任意shape的tensor,只要shape相同即可
logits = torch.tensor([0.2, -0.4, 1.2, 0.8])
targets = torch.tensor([0., 1., 1., 0.])
assert logits.shape == targets.shape# 使用 PyTorch 的 F.binary_cross_entropy_with_logits 函數計算損失
loss_pytorch = F.binary_cross_entropy_with_logits(logits, targets)# 使用手動實現的函數計算損失
loss_manual = manual_binary_cross_entropy_with_logits(logits, targets)print(f'Loss (PyTorch): {loss_pytorch.item()}')
print(f'Loss (Manual): {loss_manual.item()}')

F.binary_cross_entropy 與 F.binary_cross_entropy_with_logits的區別

F.binary_cross_entropy的輸入是probs

F.binary_cross_entropy_with_logits的輸入是logits

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716379.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716379.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716379.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Doris實戰——銀聯商務實時數倉構建

目錄 前言 一、應用場景 二、OLAP選型 三、實時數倉構建 四、實時數倉體系的建設與實踐 4.1 數倉分層的合理規劃 4.2 分桶分區策略的合理設置 4.3 多源數據遷移方案 4.4 全量與增量數據的同步 4.5 離線數據加工任務遷移 五、金融級數倉穩定性最佳實踐 5.1 多租戶資…

Jenkins的Pipeline概念

文章目錄 Pipeline什么是Jenkins Pipeline聲明式和腳本式Pipeline語法為何使用PipelinePipeline概念PipelineNodeStageStep Pipeline語法概述聲明式Pipeline腳本式Pipeline Pipeline示例 參考 Pipeline 什么是Jenkins Pipeline Jenkins Pipeline是一套插件,它支持…

【Django】model模型—模型繼承

Django中三種繼承風格 抽象基類:僅將父類用于子類公共信息的載體,這樣的父類永遠都不會單獨使用。多表繼承:繼承了一個模型(可能來源其它應用),且想要每個模型都有對應的數據表。代理模型:只想…

JProfiler相關問題及答案(2024)

1、JProfiler是什么及其用途 JProfiler是一款功能豐富的商業Java性能剖析(profiling)工具,它主要面向開發者和性能分析師,用于監測和分析Java應用程序的運行時行為。以下是對JProfiler的一些詳細介紹和它的主要用途: …

webpack的一些知識

核心 webpack 是用來搭建前端工程的它運行在node環境中,它所做的事情,簡單來說,就是打包具體來說,就是以某個模塊作為入口,根據入口分析出所有模塊的依賴關系,然后對各種模塊進行合并、壓縮,形…

洛谷P1157 組合的輸出

深搜板子加一點點修改&#xff0c;適合初學者體會深搜&#xff0c;具體看代碼 題目鏈接 ACcode #include<bits/stdc.h>using namespace std;int a, b;bitset<50>vis;//剪枝 int d[50];void dfs(int x) {if (x b 1) {for (int i 1;i < b;i)cout << se…

HBM(High Bandwidth Memory)

選擇正確的高帶寬內存 構建高性能芯片的選擇越來越多&#xff0c;但附加內存的選擇卻幾乎沒有變化。為了在汽車、消費和超大規模計算中實現最大性能&#xff0c;選擇取決于一種或多種 DRAM&#xff0c;而最大的權衡是成本與速度。 盡管多年來人們一直在努力用更快、更便宜或更…

Linux:kubernetes(k8s)搭建mater節點(kubeadm,kubectl,kubelet)(2)

安裝k8有多種方式如&#xff1a; minikube kubeadm 二進制安裝 命令行工具 我這里就使用kubeadm進行安裝 環境 3臺centos7 master ip &#xff1a;192.168.113.120 2G運存 2內核 node1 ip &#xff1a;192.168.113.121 2G運存 2內核 node2 ip &#xff1a;192.168.1…

重構與設計模型的完美融合:構建穩定可擴展系統的關鍵步驟

在軟件開發的漫長旅程中&#xff0c;系統的穩定性和可擴展性一直是開發者們追求的目標。為了實現這一目標&#xff0c;重構和設計模型成為了不可或缺的兩個關鍵元素。本文將探討如何通過重構&#xff0c;使系統更穩定、更具可擴展性&#xff0c;并深入研究如何將重構與設計模型…

JavaEE:多線程(3):案例代碼

目錄 案例一&#xff1a;單例模式 餓漢模式 懶漢模式 思考&#xff1a;懶漢模式是否線程安全&#xff1f; 案例二&#xff1a;阻塞隊列 可以實現生產者消費者模型 削峰填谷 接下來我們自己實現一個阻塞隊列 1.先實現一個循環隊列 2. 引入鎖&#xff0c;實現線程安全 …

運用qsort函數進行快排并使用C語言模擬qsort

qsort 函數的使用 首先qsort函數是使用快速排序算法來進行排序的&#xff0c;下面我們打開官網來查看qsort是如何使用的。 這里有四個參數&#xff0c;首先base 是至待排序的數組的首元素的地址&#xff0c;num 是值這個數組的元素個數&#xff0c;size 是指每個元素的大小&am…

Python猜數字小游戲

下面這段代碼是一個簡單的數字猜測游戲&#xff0c;其中計算機已經提前計算出了414 // 23的結果并存儲在變量num中。然后&#xff0c;程序會提示用戶來猜測這個結果。 以下是代碼的主要步驟和功能&#xff1a; 初始化&#xff1a; num 414 // 23&#xff1a;計算414除以23的整…

Linux:各目錄含義

簡介 學習Linux各目錄含義之前&#xff0c;我們首先要了解一下Filesystem Hierarchy Standard&#xff08;文件系統層次結構標準&#xff09;。 FHS FHS&#xff0c;即文件系統層次結構標準&#xff08;Filesystem Hierarchy Standard&#xff09;&#xff0c;是Linux和類Un…

深入了解Redis:配置文件、動態修改和安全設置

Redis 是一個開源的內存中數據結構存儲系統&#xff0c;它可以用作數據庫、緩存和消息中間件。在使用 Redis 時&#xff0c;了解其配置選項是至關重要的。本文將詳細介紹 Redis 的配置文件和常用配置項&#xff0c;并提供一些示例來說明如何設置和修改這些配置。 Redis 配置文…

基于stm32F103的座面聲控臺燈

1.基本內容&#xff1a; 設計一個放置在桌面使用的臺燈&#xff0c;使用220v交流電供電。具備顯示屏能夠實時顯示日期&#xff08;年、月、日和星期&#xff09;&#xff0c;時間&#xff08;小時、分鐘、秒&#xff09;和溫度&#xff08;攝氏度&#xff09;&#xff1b;能夠通…

Python爬取天氣數據及可視化分析!(含源碼)

天氣預報我們每天都會關注&#xff0c;我們可以根據未來的天氣增減衣物、安排出行&#xff0c;每天的氣溫、風速風向、相對濕度、空氣質量等成為關注的焦點。本次使用python中requests和BeautifulSoup庫對中國天氣網當天和未來14天的數據進行爬取&#xff0c;保存為csv文件&…

帆軟下載PDF報錯java.lang.OutOfMemoryError: Java heap space

需求:前端選擇多條數據&#xff0c;點擊下載按鈕&#xff0c;下載帆軟報表的pdf格式。 &#xff08;目前用的是帆軟PDF下載接口&#xff0c;然后java轉成文件流&#xff0c;前端接到后端接口的文件流&#xff0c;使用axios下載blob,再創建下載鏈接&#xff0c;通過link標簽實現…

ArduinoTFTLCD應用

ArduinoTFTLCD應用 ArduinoTFTLCD應用硬件連接軟件導入庫顯示數字、字符顯示漢字方案1方案2 顯示圖片 總結 ArduinoTFTLCD應用 對于手工喜歡DIY的人來說&#xff0c;Arduino驅動的TFTLCD被很多人使用&#xff0c;此處就總結一下&#xff0c;使用的是VScode的PlatformIO插件驅動…

C# API異步方法和返回類型:提升應用程序性能和靈活性

摘要&#xff1a; 異步編程是現代應用程序開發中不可或缺的一部分。在C#中&#xff0c;異步方法允許我們在等待操作完成時繼續執行其他任務&#xff0c;從而提高應用程序的性能和響應性。本文將介紹C# API異步方法的基本概念、原理和實際應用&#xff0c;并詳細討論異步方法的返…

【機器學習】實驗5,AAAI 會議論文聚類分析

本次實驗以AAAI 2014會議論文數據為基礎&#xff0c;要求實現或調用無監督聚類算法&#xff0c;了解聚類方法。 任務介紹 每年國際上召開的大大小小學術會議不計其數&#xff0c;發表了非常多的論文。在計算機領域的一些大型學術會議上&#xff0c;一次就可以發表涉及各個方向…