Pytorch中關(guān)于F.normalize計(jì)算理解
關(guān)于F.normalize計(jì)算理解
動(dòng)機(jī)
最近多次看到該方法出現(xiàn),于是準(zhǔn)備了解一下,搜了后發(fā)現(xiàn)原來(lái)是所謂的L2 norm計(jì)算
簡(jiǎn)介
函數(shù)定義
torch.nn.functional.normalize(input,?p=2.0,?dim=1,?eps=1e-12,?out=None)
功能:將某一個(gè)維度除以那個(gè)維度對(duì)應(yīng)的范數(shù)(默認(rèn)是2范數(shù))。
使用:
F.normalize(data, p=2/1, dim=0/1/-1) 將某一個(gè)維度除以那個(gè)維度對(duì)應(yīng)的范數(shù)(默認(rèn)是2范數(shù))
data:輸入的數(shù)據(jù)(tensor)p:L2/L1_norm運(yùn)算dim:0表示按列操作,則每列都是除以該列下平方和的開(kāi)方;1表示按行操作,則每行都是除以該行下所有元素平方和的開(kāi)方
舉例



最后dim=0,是1/根號(hào)下1平方+1平方,2/根號(hào)下2平方+2平方,3/根號(hào)下3平方+3平方,所以都是0.7071
Pytorch中normalize應(yīng)用
torch.nn.functional.normalize(input, p=2, dim=1, eps=1e-12, out=None)
其中,p表示范數(shù)(這里是2范數(shù)),dim表示計(jì)算范數(shù)的維度(默認(rèn)為1),eps是為了防止分母為0;
pytorch中的normalize函數(shù)本質(zhì)上就是針對(duì)某個(gè)維度進(jìn)行歸一化,公式為:

方便記憶,二維矩陣中, dim=1表示在行內(nèi)進(jìn)行歸一化,dim=0表示在列內(nèi)進(jìn)行歸一化。
在使用過(guò)程中,對(duì)dim的理解不夠到位,來(lái)三個(gè)代碼實(shí)驗(yàn)一下。
示例1:dim=1
a = F.softmax(torch.randn((1, 3, 4)), 1) b = F.normalize(a)
輸出:
// a
tensor([[[0.2621, 0.2830, 0.3758, 0.0260],
[0.3634, 0.3750, 0.5382, 0.1085],
[0.3744, 0.3420, 0.0860, 0.8655]]])
// b
b: tensor([[[0.4489, 0.4870, 0.5676, 0.0298],
[0.6224, 0.6454, 0.8130, 0.1243],
[0.6412, 0.5885, 0.1299, 0.9918]]])
代碼中針對(duì)維度1進(jìn)行歸一化。維度1有3個(gè)通道,具體的計(jì)算細(xì)節(jié)為

示例2:dim=2
a = F.softmax(torch.randn((1, 3, 4)), 1) c = F.normalize(b, dim=2)
// a tensor([[[0.0861, 0.1087, 0.0518, 0.3551], ? ? ? ? ?[0.8067, 0.4128, 0.0592, 0.2884], ? ? ? ? ?[0.1072, 0.4785, 0.8890, 0.3565]]]) // c tensor([[[0.2237, 0.2825, 0.1347, 0.9230], ? ? ? ? ?[0.8467, 0.4332, 0.0621, 0.3027], ? ? ? ? ?[0.0997, 0.4447, 0.8262, 0.3313]]])
這里作用的是維度2,可以認(rèn)為維度2有4個(gè)通道,計(jì)算細(xì)節(jié)為:

示例3:dim=0
a = F.softmax(torch.randn((1, 3, 4)), 1) c = F.normalize(b, dim=0)
// a tensor([[[0.0861, 0.1087, 0.0518, 0.3551], ? ? ? ? ?[0.8067, 0.4128, 0.0592, 0.2884], ? ? ? ? ?[0.1072, 0.4785, 0.8890, 0.3565]]]) // c tensor([[[1., 1., 1., 1.], ? ? ? ? ?[1., 1., 1., 1.], ? ? ? ? ?[1., 1., 1., 1.]]])
這里作用的是維度0;維度0上只有1個(gè)通道,因此歸一化之后全為1,即

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程
APScheduler的全稱是Advanced?Python?Scheduler,它是一個(gè)輕量級(jí)的?Python定時(shí)任務(wù)調(diào)度框架,下面這篇文章主要給大家介紹了關(guān)于python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程,需要的朋友可以參考下2022-02-02
Python實(shí)現(xiàn)小黑屋游戲的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)小黑屋游戲的完整實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
python采用django框架實(shí)現(xiàn)支付寶即時(shí)到帳接口
這篇文章主要介紹了python采用django框架實(shí)現(xiàn)支付寶即時(shí)到帳接口的相關(guān)資料,需要的朋友可以參考下2016-05-05
Python中性能分析利器pyinstrument詳細(xì)講解
大家好,本篇文章主要講的是Python中性能分析利器pyinstrument詳細(xì)講解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02
詳細(xì)解析Python當(dāng)中的數(shù)據(jù)類型和變量
這篇文章主要介紹了Python當(dāng)中的數(shù)據(jù)類型和變量,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-04-04
淺析對(duì)torch.unsqueeze()函數(shù)理解
torch.unsqueeze()函數(shù)起到升維的作用,dim等于幾表示在第幾維度加一,這篇文章主要介紹了對(duì)torch.unsqueeze()函數(shù)理解深度解析,感興趣的朋友跟隨小編一起看看吧2024-06-06
python 從csv讀數(shù)據(jù)到mysql的實(shí)例
今天小編就為大家分享一篇python 從csv讀數(shù)據(jù)到mysql的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06
手動(dòng)安裝Anaconda環(huán)境變量的實(shí)現(xiàn)教程
這篇文章主要介紹了手動(dòng)安裝Anaconda環(huán)境變量的實(shí)現(xiàn)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
python多版本工具miniconda的配置優(yōu)化實(shí)現(xiàn)
通過(guò)Miniconda,您可以輕松地創(chuàng)建和管理多個(gè)Python環(huán)境,同時(shí)確保每個(gè)環(huán)境具有所需的依賴項(xiàng)和軟件包,本文主要介紹了python多版本工具miniconda的配置優(yōu)化實(shí)現(xiàn),感興趣的可以了解一下2024-01-01

