最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

2022為峰Python全棧測(cè)試開(kāi)發(fā)班V5.1編程艾F(xiàn)享

2022-10-28 12:28 作者:山觀(guān)那恭喜囧昂貴的  | 我要投稿


Tricks幫助你提高調(diào)試Pytorch的效率。
指導(dǎo)閱讀

2022為峰Python全棧測(cè)試開(kāi)發(fā)班V5.1編程艾F(xiàn)享

download:https://www.51xuebc.com/thread-506-1-1.html

備用 3w 51xuebc com

好的工具和工作習(xí)慣可以大大提高工作效率。
每個(gè)深度學(xué)習(xí)項(xiàng)目都不一樣。無(wú)論你有多少經(jīng)驗(yàn),你總會(huì)遇到新的挑戰(zhàn)和意想不到的行為。你在項(xiàng)目中使用的技能和思維方式將決定你能多快找到并解決這些阻礙你成功的障礙。
從實(shí)用的角度來(lái)看,深度學(xué)習(xí)項(xiàng)目是從代碼開(kāi)始的。一開(kāi)始組織起來(lái)很容易,但是隨著項(xiàng)目復(fù)雜度的增加,在調(diào)試和完整性檢查上花費(fèi)的時(shí)間會(huì)越來(lái)越多。令人驚訝的是,很多都可以自動(dòng)完成。在這篇文章中,我將告訴你如何去做。

找出你的訓(xùn)練損失沒(méi)有減少的原因。
實(shí)現(xiàn)自動(dòng)模型驗(yàn)證和異常檢測(cè)。
使用PyTorch Lightning節(jié)省寶貴的調(diào)試時(shí)間。
招數(shù)二:記錄訓(xùn)練數(shù)據(jù)的直方圖。
總是檢查輸入數(shù)據(jù)的范圍是很重要的。如果模型權(quán)重和數(shù)據(jù)是非常不同的量級(jí),則在極端情況下可能導(dǎo)致沒(méi)有或非常低的學(xué)習(xí)進(jìn)度和數(shù)值不穩(wěn)定。例如,當(dāng)數(shù)據(jù)擴(kuò)展以錯(cuò)誤的順序應(yīng)用或忘記規(guī)范化時(shí),就會(huì)發(fā)生這種情況。在我們的例子中是這樣嗎?我們應(yīng)該能夠通過(guò)打印最小值和最大值來(lái)找出答案。但是等等!這不是一個(gè)好的解決方案,因?yàn)樗鼤?huì)不必要地污染代碼,并在需要時(shí)花費(fèi)太多時(shí)間來(lái)重復(fù)它。更好的方法:寫(xiě)一個(gè)回調(diào)類(lèi)來(lái)幫我們做!
類(lèi)輸入監(jiān)視器(pl?;?fù)?:


def on_train_batch_start(self,trainer,pl_module,batch,batch_idx,dataloader_idx):
if(batch _ idx+1)% trainer . log _ every _ n _ steps = = 0:
x,y =批次
logger =培訓(xùn)師
logger . experience . add _ histogram(" input ",x,global _ step = trainer . global _ step)
logger . experience . add _ histogram(" target ",y,global _ step = trainer . global _ step)

#像這樣使用回調(diào):
model = LitClassifier()
培訓(xùn)師= pl。培訓(xùn)師(gpus = 1,回調(diào)=[InputMonitor()])
trainer.fit(型號(hào))
復(fù)制代碼
一個(gè)簡(jiǎn)單的回調(diào),將訓(xùn)練數(shù)據(jù)的直方圖記錄到TensorBoard。
PyTorchlighting中的回調(diào)可以保存任何可以注入訓(xùn)練器的代碼。在進(jìn)入訓(xùn)練步驟之前,計(jì)算輸入數(shù)據(jù)的直方圖。將此函數(shù)封裝到回調(diào)類(lèi)中有以下優(yōu)點(diǎn):

它與你的研究代碼是分開(kāi)的,沒(méi)有必要修改你的LightningModule!
它是可移植的,因此可以在未來(lái)的項(xiàng)目中重用,只需要修改兩行代碼:導(dǎo)入回調(diào),然后將其傳遞給Trainer。
可以通過(guò)子類(lèi)化或者結(jié)合其他回調(diào)來(lái)擴(kuò)展。

現(xiàn)在有了新的回調(diào)函數(shù),我們可以打開(kāi)TensorBoard并切換到“直方圖”選項(xiàng)卡來(lái)檢查訓(xùn)練數(shù)據(jù)的分布:

在目標(biāo)范圍[0,9]中,這是正確的,因?yàn)镸NIST有一個(gè)10位的類(lèi),但圖像的值在-130和-127之間,這是錯(cuò)誤的!我們很快發(fā)現(xiàn)第41行規(guī)范化中有一個(gè)問(wèn)題:
轉(zhuǎn)變。Normalize(128,1) #錯(cuò)誤的規(guī)范化
復(fù)制代碼
這兩個(gè)數(shù)字應(yīng)該是輸入數(shù)據(jù)(在我們的例子中是圖像中的像素)的平均值和標(biāo)準(zhǔn)差。為了解決這個(gè)問(wèn)題,我們添加了真實(shí)平均值和標(biāo)準(zhǔn)偏差,并命名了參數(shù)以使其更加清晰:
轉(zhuǎn)變。歸一化(平均值=0.1307,標(biāo)準(zhǔn)差=0.3081)
復(fù)制代碼
我們可以查這些數(shù)字,因?yàn)樗鼈兪且阎摹?duì)于自己的數(shù)據(jù)集,你得自己去計(jì)算。
歸一化后像素的平均值為0,標(biāo)準(zhǔn)差為1,就像分類(lèi)器的權(quán)重一樣。我們可以通過(guò)看TensorBoard的直方圖來(lái)確認(rèn)這一點(diǎn)。
技巧3:檢測(cè)正向傳播中的異常
在解決了標(biāo)準(zhǔn)化問(wèn)題后,我們現(xiàn)在也可以在TensorBoard中獲得預(yù)期的直方圖??上p失并沒(méi)有減少。還有一個(gè)問(wèn)題。我知道數(shù)據(jù)是正確的,并且開(kāi)始尋找錯(cuò)誤的一個(gè)好地方是網(wǎng)絡(luò)的前向路徑。一個(gè)常見(jiàn)的誤差源是張量形狀的操作,如置換、整形、視圖、平坦等。,或應(yīng)用于一維的操作,如softmax。當(dāng)這些函數(shù)應(yīng)用于錯(cuò)誤的大小或錯(cuò)誤的順序時(shí),我們通常會(huì)得到形狀不匹配的錯(cuò)誤,但情況并非總是如此!這些錯(cuò)誤很難追蹤。
讓我們來(lái)看看一種能讓我們快速檢測(cè)出這些錯(cuò)誤的技術(shù)。

快速檢查模型是否在批處理中混合數(shù)據(jù)。
想法很簡(jiǎn)單:如果我們改變第n個(gè)輸入樣本,它應(yīng)該只影響第n個(gè)輸出。如果其他輸出i≠n也發(fā)生變化,模型就會(huì)混數(shù)據(jù),這就不好了!實(shí)施該測(cè)試的一種可靠方法是計(jì)算所有輸入的第n個(gè)輸出的梯度。對(duì)于所有i≠n的漸變必須為零(以上動(dòng)畫(huà)中的紅色),對(duì)于i = n的漸變必須非零(以上動(dòng)畫(huà)中的綠色)。如果滿(mǎn)足這些條件,模型就通過(guò)了測(cè)試。以下是n = 3時(shí)的實(shí)現(xiàn):
#用所有輸入檢查第n個(gè)小批量樣品的梯度
n = 3

# 1.輸入批次需要梯度
example_input = torch.rand(5,1,28,28,requires_grad=True)

# 2.通過(guò)模型運(yùn)行批處理
輸出=模型(示例_輸入)

# 3.計(jì)算第n個(gè)輸出樣本的虛擬損耗并反向傳播
輸出[n]。abs()。sum()。向后()

# 4.檢查樣本I上的梯度!= n都是零!
#健全性檢查:如果這沒(méi)有返回0,您有一個(gè)bug!
i = 0
example_input.grad[i]。abs()。sum()。項(xiàng)目()
復(fù)制代碼
下面是同樣的閃電回調(diào):
類(lèi)CheckBatchGradient(pl?;?fù)?:

定義on_train_start(自我、教練、模型):
n = 0

示例輸入=模型.示例輸入陣列.至(模型.設(shè)備)
example _ input . requires _ grad = True

零grad()
輸出=模型(示例_輸入)
輸出[n]。abs()。sum()。向后()

zero _ grad _ inds = list(range(example _ input . size(0)))
零梯度指數(shù)

if example _ input . grad[zero _ grad _ inds]。abs()。sum()。item() > 0
raise RuntimeError("您的模型混合了批處理維度中的數(shù)據(jù)!")

#像這樣使用回調(diào):
model = LitClassifier()
培訓(xùn)師= pl。訓(xùn)練器(gpus = 1,回調(diào)=[CheckBatchGradient()])
trainer.fit(型號(hào))
復(fù)制代碼
當(dāng)這個(gè)測(cè)試應(yīng)用于LitClassifer時(shí),您可以立即發(fā)現(xiàn)它混合了數(shù)據(jù)。既然我們知道我們要找的是什么,我們很快就在正向傳輸中發(fā)現(xiàn)了一個(gè)錯(cuò)誤。第35行中的Softmax應(yīng)用于錯(cuò)誤的尺寸:
output = F.log_softmax(x,dim=0)
復(fù)制代碼
應(yīng)該是:
output = F.log_softmax(x,dim=1)
復(fù)制代碼
好了,分類(lèi)器工作了!并且訓(xùn)練和驗(yàn)證損失迅速減少。
摘要


編寫(xiě)好的代碼從組織開(kāi)始。PyTorch Lightning通過(guò)刪除圍繞訓(xùn)練周期工程、檢查點(diǎn)保存、日志記錄等的樣板代碼來(lái)處理這一部分。剩下的就是實(shí)際的研究代碼:模型、優(yōu)化和數(shù)據(jù)加載。如果事情沒(méi)有按照我們預(yù)期的方式運(yùn)行,很可能是這三部分代碼中的某一部分有錯(cuò)誤。在這篇博文中,我們實(shí)現(xiàn)了兩個(gè)回調(diào)來(lái)幫助我們1)監(jiān)控進(jìn)入模型的數(shù)據(jù),以及2)驗(yàn)證我們的網(wǎng)絡(luò)中的層不會(huì)在批處理維度中混合數(shù)據(jù)?;卣{(diào)的概念是向現(xiàn)有算法添加任意邏輯的一種非常優(yōu)雅的方式。一旦實(shí)現(xiàn),通過(guò)修改兩行代碼就可以很容易地集成到一個(gè)新項(xiàng)目中。

2022為峰Python全棧測(cè)試開(kāi)發(fā)班V5.1編程艾F(xiàn)享的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
台山市| 隆子县| 定兴县| 信阳市| 仪征市| 台湾省| 昌黎县| 德江县| 英山县| 南丹县| 合阳县| 辰溪县| 洛隆县| 平远县| 韶关市| 临武县| 广东省| 东宁县| 双江| 翁源县| 宣威市| 江门市| 富源县| 吉安市| 哈尔滨市| 肇州县| 泰兴市| 阿荣旗| 万源市| 阿鲁科尔沁旗| 怀仁县| 涟源市| 益阳市| 罗源县| 太谷县| 凤凰县| 霍邱县| 西青区| 福鼎市| 奇台县| 故城县|