PyTorch中F.softmax的具體使用
F.softmax
是 PyTorch 中用于計算 Softmax 函數(shù) 的函數(shù),通常用于 多分類任務(wù) 的輸出層,用來將模型的原始輸出(稱為 logits)轉(zhuǎn)化為概率分布。
Softmax 函數(shù)將每個類別的得分(logits)轉(zhuǎn)換為一個介于 0 和 1 之間的概率值,并且所有類別的概率之和等于 1。
Softmax 函數(shù)的定義
給定一個包含 個元素的向量
,Softmax 函數(shù)的輸出是一個概率分布
,其中每個
表示第
個類別的概率。Softmax 的公式如下:
??
:第
個類別的原始得分(logit)。
?:對得分進行指數(shù)運算。
- ?
:所有類別得分指數(shù)的總和,用于對概率進行歸一化,使得所有的概率和為 1。
F.softmax 的作用
F.softmax
函數(shù)將給定的 logits(即模型的原始輸出)轉(zhuǎn)換為概率分布。
假設(shè)我們有一個包含 10 個類別的模型輸出,那么 F.softmax
會將這 10 個 logits 轉(zhuǎn)化為 10 個概率,每個概率值在 0 到 1 之間,并且所有 10 個概率的和為 1。
用法
在 PyTorch 中,F.softmax
由 torch.nn.functional
模塊提供,使用方式如下:
import torch import torch.nn.functional as F # 假設(shè)我們有一個大小為 [batch_size, num_classes] 的張量 logits = torch.tensor([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]) # 計算 softmax,dim=1 表示對每一行進行 softmax 計算 probabilities = F.softmax(logits, dim=1) print(probabilities)
詳細解釋
logits:是一個 2D 張量,每一行表示一個樣本的原始輸出值(logits),每一列表示該樣本在某個類別的得分。
dim=1:指定了計算 Softmax 的維度。
dim=1
表示對每一行計算 Softmax,即每個樣本的得分都會被轉(zhuǎn)化為一個概率分布。注意,如果是處理多維數(shù)據(jù),可以通過調(diào)整dim
來指定 Softmax 計算的維度。- 如果
dim=0
,則對每列計算 Softmax,通常在處理多批次數(shù)據(jù)時不常用。
- 如果
output:Softmax 轉(zhuǎn)換后的輸出是一個概率分布,所有元素都在 0 到 1 之間,并且每行的元素和為 1。
示例代碼解釋
import torch import torch.nn.functional as F # 假設(shè)輸入是一個大小為 (2, 3) 的張量,其中 2 是 batch_size,3 是類別數(shù) logits = torch.tensor([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]) # 計算 Softmax,按照列來計算,即對每行進行 Softmax probabilities = F.softmax(logits, dim=1) print(probabilities)
輸入:
tensor([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]])
輸出:
tensor([[0.09003057, 0.24472847, 0.66524096], [0.09003057, 0.24472847, 0.66524096]])
解釋:
- 對于每一行的得分,Softmax 會將其轉(zhuǎn)換為概率。
- 第一行
[1.0, 2.0, 3.0]
經(jīng)過 Softmax 處理后得到[0.0900, 0.2447, 0.6652]
,這些概率值的總和為 1。 - 第二行
[1.0, 2.0, 3.0]
同樣經(jīng)過 Softmax 轉(zhuǎn)換后,得到相同的概率分布[0.0900, 0.2447, 0.6652]
,這也保證了概率總和為 1。
- 第一行
為什么使用 Softmax?
多分類任務(wù):在多分類問題中,模型的輸出通常是每個類別的原始得分。Softmax 函數(shù)能夠?qū)⑦@些得分轉(zhuǎn)化為概率分布,使得每個類別的預(yù)測概率能夠加起來為 1,并且通過最大概率來做預(yù)測。
分類概率:Softmax 給出的每個類別的概率可以幫助我們了解模型對每個類別的信心程度。對于實際應(yīng)用,通常選擇概率最大的類別作為模型的預(yù)測結(jié)果。
Softmax 與 Logits
- Logits 是未經(jīng)處理的原始輸出值,通常來自神經(jīng)網(wǎng)絡(luò)的輸出層。
- Softmax 是對 logits 的一種規(guī)范化,它將 logits 轉(zhuǎn)換為 0 到 1 之間的概率值。
示例:多分類任務(wù)中的 Softmax
假設(shè)我們有一個多分類任務(wù),模型的輸出是一個包含 4 個類別的 logits 向量,[2.0, 1.0, 0.1, 0.5]
。
我們希望將其轉(zhuǎn)換為類別的概率分布。
import torch import torch.nn.functional as F logits = torch.tensor([2.0, 1.0, 0.1, 0.5]) # 使用 F.softmax 將 logits 轉(zhuǎn)換為概率分布 probabilities = F.softmax(logits, dim=0) print(probabilities)
輸出:
tensor([0.5438, 0.1993, 0.0717, 0.1852])
解釋:
- 原始 logits 為
[2.0, 1.0, 0.1, 0.5]
,經(jīng)過 Softmax 處理后,得到了每個類別的概率[0.5438, 0.1993, 0.0717, 0.1852]
。概率最大的類別是第一個類別,其概率為 0.5438。
總結(jié)
- Softmax 函數(shù)將 logits 轉(zhuǎn)換為概率分布,適用于多分類任務(wù)。
- 它保證了輸出的每個類別概率值在 0 到 1 之間,并且所有概率的和為 1。
- 在 PyTorch 中,
F.softmax
是計算 Softmax 的常用函數(shù),通常與CrossEntropyLoss
搭配使用。
到此這篇關(guān)于PyTorch中F.softmax的具體使用的文章就介紹到這了,更多相關(guān)PyTorch F.softmax內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python 寫一個靜態(tài)服務(wù)(實戰(zhàn))
今天小編就為大家分享一篇使用python 寫一個靜態(tài)服務(wù)(實戰(zhàn)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06Pytorch Dataset,TensorDataset,Dataloader,Sampler關(guān)系解讀
這篇文章主要介紹了Pytorch Dataset,TensorDataset,Dataloader,Sampler關(guān)系,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Python爬蟲學(xué)習(xí)之獲取指定網(wǎng)頁源碼
這篇文章主要為大家詳細介紹了Python爬蟲學(xué)習(xí)之獲取指定網(wǎng)頁源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07對Python中range()函數(shù)和list的比較
下面小編就為大家分享一篇對Python中range()函數(shù)和list的比較,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04