最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch 實(shí)現(xiàn)計(jì)算 kl散度 F.kl_div()

 更新時間:2021年05月24日 08:42:58   作者:Answerlzd  
這篇文章主要介紹了pytorch 實(shí)現(xiàn)計(jì)算 kl散度 F.kl_div(),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

先附上官方文檔說明:https://pytorch.org/docs/stable/nn.functional.html

torch.nn.functional.kl_div(input, target, size_average=None, reduce=None, reduction='mean')

Parameters

input – Tensor of arbitrary shape

target – Tensor of the same shape as input

size_average (bool, optional) – Deprecated (see reduction). By default, the losses are averaged over each loss element in the batch. Note that for some losses, there multiple elements per sample. If the field size_average is set to False, the losses are instead summed for each minibatch. Ignored when reduce is False. Default: True

reduce (bool, optional) – Deprecated (see reduction). By default, the losses are averaged or summed over observations for each minibatch depending on size_average. When reduce is False, returns a loss per batch element instead and ignores size_average. Default: True

reduction (string, optional) – Specifies the reduction to apply to the output: 'none' | 'batchmean' | 'sum' | 'mean'. 'none': no reduction will be applied 'batchmean': the sum of the output will be divided by the batchsize 'sum': the output will be summed 'mean': the output will be divided by the number of elements in the output Default: 'mean'

然后看看怎么用:

第一個參數(shù)傳入的是一個對數(shù)概率矩陣,第二個參數(shù)傳入的是概率矩陣。這里很重要,不然求出來的kl散度可能是個負(fù)值。

比如現(xiàn)在我有兩個矩陣X, Y。因?yàn)閗l散度具有不對稱性,存在一個指導(dǎo)和被指導(dǎo)的關(guān)系,因此這連個矩陣輸入的順序需要確定一下。

舉個例子:

如果現(xiàn)在想用Y指導(dǎo)X,第一個參數(shù)要傳X,第二個要傳Y。就是被指導(dǎo)的放在前面,然后求相應(yīng)的概率和對數(shù)概率就可以了。

import torch
import torch.nn.functional as F
# 定義兩個矩陣
x = torch.randn((4, 5))
y = torch.randn((4, 5))
# 因?yàn)橐脃指導(dǎo)x,所以求x的對數(shù)概率,y的概率
logp_x = F.log_softmax(x, dim=-1)
p_y = F.softmax(y, dim=-1)
 
 
kl_sum = F.kl_div(logp_x, p_y, reduction='sum')
kl_mean = F.kl_div(logp_x, p_y, reduction='mean')
 
print(kl_sum, kl_mean)
 
 
>>> tensor(3.4165) tensor(0.1708)

補(bǔ)充:pytorch中的kl散度,為什么kl散度是負(fù)數(shù)?

F.kl_div()或者nn.KLDivLoss()是pytroch中計(jì)算kl散度的函數(shù),它的用法有很多需要注意的細(xì)節(jié)。

輸入

第一個參數(shù)傳入的是一個對數(shù)概率矩陣,第二個參數(shù)傳入的是概率矩陣。并且因?yàn)閗l散度具有不對稱性,存在一個指導(dǎo)和被指導(dǎo)的關(guān)系,因此這連個矩陣輸入的順序需要確定一下。如果現(xiàn)在想用Y指導(dǎo)X,第一個參數(shù)要傳X,第二個要傳Y。就是被指導(dǎo)的放在前面,然后求相應(yīng)的概率和對數(shù)概率就可以了。

所以,一隨機(jī)初始化一個tensor為例,對于第一個輸入,我們需要先對這個tensor進(jìn)行softmax(確保各維度和為1),然后再取log;對于第二個輸入,我們需要對這個tensor進(jìn)行softmax。

import torch
import torch.nn.functional as F

a = torch.tensor([[0,0,1.1,2,0,10,0],[0,0,1,2,0,10,0]])
log_a =F.log_softmax(a)

b = torch.tensor([[0,0,1.1,2,0,7,0],[0,0,1,2,0,10,0]])
softmax_b =F.softmax(b,dim=-1)

kl_mean = F.kl_div(log_a, softmax_b, reduction='mean')
print(kl_mean)

為什么KL散度計(jì)算出來為負(fù)數(shù)

先確保對第一個輸入進(jìn)行了softmax+log操作,對第二個參數(shù)進(jìn)行了softmax操作。不進(jìn)行softmax操作就可能為負(fù)。

然后查看自己的輸入是否是小數(shù)點(diǎn)后有很多位,當(dāng)小數(shù)點(diǎn)后很多位的時候,pytorch下的softmax會產(chǎn)生各維度和不為1的現(xiàn)象,導(dǎo)致kl散度為負(fù),如下所示:

a = torch.tensor([[0.,0,0.000001,0.0000002,0,0.0000007,0]])
log_a =F.log_softmax(a,dim=-1)
print("log_a:",log_a)

b = torch.tensor([[0.,0,0.000001,0.0000002,0,0.0000007,0]])
softmax_b =F.softmax(b,dim=-1)
print("softmax_b:",softmax_b)

kl_mean = F.kl_div(log_a, softmax_b,reduction='mean')
print("kl_mean:",kl_mean)

輸出如下,我們可以看到softmax_b的各維度和不為1:

在這里插入圖片描述

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法示例

    Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法,結(jié)合實(shí)例形式分析了Python基于urllib2及cookielib模塊的http請求、數(shù)據(jù)傳輸及交互相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • 解決plt.savefig()保存到本地的圖片上下左右會有白邊

    解決plt.savefig()保存到本地的圖片上下左右會有白邊

    這篇文章主要介紹了解決plt.savefig()保存到本地的圖片上下左右會有白邊的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實(shí)現(xiàn)購物評論文本情感分析操作【基于中文文本挖掘庫snownlp】

    Python實(shí)現(xiàn)購物評論文本情感分析操作【基于中文文本挖掘庫snownlp】

    這篇文章主要介紹了Python實(shí)現(xiàn)購物評論文本情感分析操作,結(jié)合實(shí)例形式分析了Python使用中文文本挖掘庫snownlp操作中文文本進(jìn)行感情分析的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • python源文件的字符編碼知識點(diǎn)詳解

    python源文件的字符編碼知識點(diǎn)詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python源文件的字符編碼知識點(diǎn)詳解,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • 詳解Python修復(fù)遙感影像條帶的兩種方式

    詳解Python修復(fù)遙感影像條帶的兩種方式

    這篇文章主要介紹了詳解Python修復(fù)遙感影像條帶的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 關(guān)于Python中Math庫的使用

    關(guān)于Python中Math庫的使用

    這篇文章主要介紹了關(guān)于Python中Math庫的使用,math?庫是?Python?提供的內(nèi)置數(shù)學(xué)類函數(shù)庫,因?yàn)閺?fù)數(shù)類型常用于科學(xué)計(jì)算,需要的朋友可以參考下
    2023-04-04
  • python腳本作為Windows服務(wù)啟動代碼詳解

    python腳本作為Windows服務(wù)啟動代碼詳解

    本篇文章給大家分享了用python腳本寫出作為Windows服務(wù)啟動功能,對此有需求的朋友跟著小編一起學(xué)習(xí)下。
    2018-02-02
  • Python 刪除連續(xù)出現(xiàn)的指定字符的實(shí)例

    Python 刪除連續(xù)出現(xiàn)的指定字符的實(shí)例

    今天小編就為大家分享一篇Python 刪除連續(xù)出現(xiàn)的指定字符的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python圖像處理二值化方法實(shí)例匯總

    Python圖像處理二值化方法實(shí)例匯總

    這篇文章主要介紹了Python圖像處理二值化方法實(shí)例匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Flask框架WTForm表單用法示例

    Flask框架WTForm表單用法示例

    這篇文章主要介紹了Flask框架WTForm表單用法,結(jié)合登錄驗(yàn)證的具體實(shí)例分析了Flask框架WTForm表單相關(guān)使用技巧,需要的朋友可以參考下
    2018-07-07

最新評論

蒲江县| 开平市| 衡阳市| 甘德县| 安平县| 滨海县| 天门市| 类乌齐县| 陇川县| 西藏| 游戏| 大港区| 乐亭县| 安阳市| 龙门县| 台山市| 苏尼特左旗| 米林县| 诏安县| 迭部县| 德钦县| 全椒县| 吐鲁番市| 威宁| 宁津县| 舒兰市| 蕉岭县| 沙湾县| 双鸭山市| 离岛区| 桃江县| 张掖市| 东源县| 宾川县| 门源| 北宁市| 井冈山市| 宜宾市| 本溪| 西青区| 舒兰市|