女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

最常見的4個(gè)神經(jīng)網(wǎng)絡(luò)錯(cuò)誤是什么?

深度學(xué)習(xí)自然語(yǔ)言處理 ? 來源:AI公園 ? 作者:Yuval Greenfield ? 2020-11-27 10:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最常見的神經(jīng)網(wǎng)絡(luò)錯(cuò)誤:

1)你沒有首先嘗試過擬合單個(gè)batch。

2)你忘了為網(wǎng)絡(luò)設(shè)置train/eval模式。

3)在.backward()之前忘記了.zero_grad()(在pytorch中)。

4)將softmaxed輸出傳遞給了期望原始logits的損失,還有其他嗎?

這篇文章將逐點(diǎn)分析這些錯(cuò)誤是如何在PyTorch代碼示例中體現(xiàn)出來的。

代碼:https://github.com/missinglinkai/common-nn-mistakes

常見錯(cuò)誤 #1 你沒有首先嘗試過擬合單個(gè)batch

Andrej說我們應(yīng)該過擬合單個(gè)batch。為什么?好吧,當(dāng)你過擬合了單個(gè)batch —— 你實(shí)際上是在確保模型在工作。我不想在一個(gè)巨大的數(shù)據(jù)集上浪費(fèi)了幾個(gè)小時(shí)的訓(xùn)練時(shí)間,只是為了發(fā)現(xiàn)因?yàn)橐粋€(gè)小錯(cuò)誤,它只有50%的準(zhǔn)確性。當(dāng)你的模型完全記住輸入時(shí),你會(huì)得到的結(jié)果是對(duì)其最佳表現(xiàn)的很好的預(yù)測(cè)。

可能最佳表現(xiàn)為零,因?yàn)樵趫?zhí)行過程中拋出了一個(gè)異常。但這沒關(guān)系,因?yàn)槲覀兒芸炀湍馨l(fā)現(xiàn)問題并解決它??偨Y(jié)一下,為什么你應(yīng)該從數(shù)據(jù)集的一個(gè)小子集開始過擬合:

發(fā)現(xiàn)bug

估計(jì)最佳的可能損失和準(zhǔn)確率

快速迭代

在PyTorch數(shù)據(jù)集中,你通常在dataloader上迭代。你的第一個(gè)嘗試可能是索引train_loader。

#TypeError:'DataLoader'objectdoesnotsupportindexing first_batch=train_loader[0]

你會(huì)立即看到一個(gè)錯(cuò)誤,因?yàn)镈ataLoaders希望支持網(wǎng)絡(luò)流和其他不需要索引的場(chǎng)景。所以沒有__getitem__方法,這導(dǎo)致了[0]操作失敗,然后你會(huì)嘗試將其轉(zhuǎn)換為list,這樣就可以支持索引。

#slow,wasteful first_batch=list(train_loader)[0]

但這意味著你要評(píng)估整個(gè)數(shù)據(jù)集這會(huì)消耗你的時(shí)間和內(nèi)存。那么我們還能嘗試什么呢?

Python for循環(huán)中,當(dāng)你輸入如下:

foriteminiterable: do_stuff(item)

你有效地得到了這個(gè):

iterator=iter(iterable) try: whileTrue: item=next(iterator) do_stuff(item) exceptStopIteration: pass

調(diào)用“iter”函數(shù)來創(chuàng)建迭代器,然后在循環(huán)中多次調(diào)用該函數(shù)的“next”來獲取下一個(gè)條目。直到我們完成時(shí),StopIteration被觸發(fā)。在這個(gè)循環(huán)中,我們只需要調(diào)用next, next, next… 。為了模擬這種行為但只獲取第一項(xiàng),我們可以使用這個(gè):

first=next(iter(iterable))

我們調(diào)用“iter”來獲得迭代器,但我們只調(diào)用“next”函數(shù)一次。注意,為了清楚起見,我將下一個(gè)結(jié)果分配到一個(gè)名為“first”的變量中。我把這叫做“next-iter” trick。在下面的代碼中,你可以看到完整的train data loader的例子:

forbatch_idx,(data,target)inenumerate(train_loader): #trainingcodehere

下面是如何修改這個(gè)循環(huán)來使用 first-iter trick :

first_batch=next(iter(train_loader)) forbatch_idx,(data,target)inenumerate([first_batch]*50): #trainingcodehere

你可以看到我將“first_batch”乘以了50次,以確保我會(huì)過擬合。

常見錯(cuò)誤 #2: 忘記為網(wǎng)絡(luò)設(shè)置 train/eval 模式

為什么PyTorch關(guān)注我們是訓(xùn)練還是評(píng)估模型?最大的原因是dropout。這項(xiàng)技術(shù)在訓(xùn)練中隨機(jī)去除神經(jīng)元。

想象一下,如果右邊的紅色神經(jīng)元是唯一促成正確結(jié)果的神經(jīng)元。一旦我們移除紅色神經(jīng)元,它就迫使其他神經(jīng)元訓(xùn)練和學(xué)習(xí)如何在沒有紅色的情況下保持準(zhǔn)確。這種drop-out提高了最終測(cè)試的性能 —— 但它對(duì)訓(xùn)練期間的性能產(chǎn)生了負(fù)面影響,因?yàn)榫W(wǎng)絡(luò)是不全的。在運(yùn)行腳本并查看MissingLink dashobard的準(zhǔn)確性時(shí),請(qǐng)記住這一點(diǎn)。

在這個(gè)特定的例子中,似乎每50次迭代就會(huì)降低準(zhǔn)確度。

如果我們檢查一下代碼 —— 我們看到確實(shí)在train函數(shù)中設(shè)置了訓(xùn)練模式。

deftrain(model,optimizer,epoch,train_loader,validation_loader): model.train()#???????????? forbatch_idx,(data,target)inexperiment.batch_loop(iterable=train_loader): data,target=Variable(data),Variable(target) #Inference output=model(data) loss_t=F.nll_loss(output,target) #Theiconicgrad-back-steptrio optimizer.zero_grad() loss_t.backward() optimizer.step() ifbatch_idx%args.log_interval==0: train_loss=loss_t.item() train_accuracy=get_correct_count(output,target)*100.0/len(target) experiment.add_metric(LOSS_METRIC,train_loss) experiment.add_metric(ACC_METRIC,train_accuracy) print('TrainEpoch:{}[{}/{}({:.0f}%)] Loss:{:.6f}'.format( epoch,batch_idx,len(train_loader), 100.*batch_idx/len(train_loader),train_loss)) withexperiment.validation(): val_loss,val_accuracy=test(model,validation_loader)#???????????? experiment.add_metric(LOSS_METRIC,val_loss) experiment.add_metric(ACC_METRIC,val_accuracy)

這個(gè)問題不太容易注意到,在循環(huán)中我們調(diào)用了test函數(shù)。

deftest(model,test_loader): model.eval() #...

在test函數(shù)內(nèi)部,我們將模式設(shè)置為eval!這意味著,如果我們?cè)谟?xùn)練過程中調(diào)用了test函數(shù),我們就會(huì)進(jìn)eval模式,直到下一次train函數(shù)被調(diào)用。這就導(dǎo)致了每一個(gè)epoch中只有一個(gè)batch使用了drop-out ,這就導(dǎo)致了我們看到的性能下降。

修復(fù)很簡(jiǎn)單 —— 我們將model.train()向下移動(dòng)一行,讓如訓(xùn)練循環(huán)中。理想的模式設(shè)置是盡可能接近推理步驟,以避免忘記設(shè)置它。修正后,我們的訓(xùn)練過程看起來更合理,沒有中間的峰值出現(xiàn)。請(qǐng)注意,由于使用了drop-out ,訓(xùn)練準(zhǔn)確性會(huì)低于驗(yàn)證準(zhǔn)確性。

常用的錯(cuò)誤 #3: 忘記在.backward()之前進(jìn)行.zero_grad()

當(dāng)在 “l(fā)oss”張量上調(diào)用 “backward” 時(shí),你是在告訴PyTorch從loss往回走,并計(jì)算每個(gè)權(quán)重對(duì)損失的影響有多少,也就是這是計(jì)算圖中每個(gè)節(jié)點(diǎn)的梯度。使用這個(gè)梯度,我們可以最優(yōu)地更新權(quán)值。

這是它在PyTorch代碼中的樣子。最后的“step”方法將根據(jù)“backward”步驟的結(jié)果更新權(quán)重。從這段代碼中可能不明顯的是,如果我們一直在很多個(gè)batch上這么做,梯度會(huì)爆炸,我們使用的step將不斷變大。

output=model(input)#forward-pass loss_fn.backward()#backward-pass optimizer.step()#updateweightsbyanevergrowinggradient????????????

為了避免step變得太大,我們使用zero_grad方法。

output=model(input)#forward-pass optimizer.zero_grad()#resetgradient???? loss_fn.backward()#backward-pass optimizer.step()#updateweightsusingareasonablysizedgradient????

這可能感覺有點(diǎn)過于明顯,但它確實(shí)賦予了對(duì)梯度的精確控制。有一種方法可以確保你沒有搞混,那就是把這三個(gè)函數(shù)放在一起:

zero_grad

backward

step

在我們的代碼例子中,在完全不使用zero_grad的情況下。神經(jīng)網(wǎng)絡(luò)開始變得更好,因?yàn)樗诟倪M(jìn),但梯度最終會(huì)爆炸,所有的更新變得越來越垃圾,直到網(wǎng)絡(luò)最終變得無用。

調(diào)用backward之后再做zero_grad。什么也沒有發(fā)生,因?yàn)槲覀儾恋袅颂荻?,所以?quán)重沒有更新。剩下的唯一有變化的是dropout。

我認(rèn)為在每次step方法被調(diào)用時(shí)自動(dòng)重置梯度是有意義的。

在backward的時(shí)候不使用zero_grad的一個(gè)原因是,如果你每次調(diào)用step()時(shí)都要多次調(diào)用backward,例如,如果你每個(gè)batch只能將一個(gè)樣本放入內(nèi)存中,那么一個(gè)梯度會(huì)噪聲太大,你想要在每個(gè)step中聚合幾個(gè)batch的梯度。另一個(gè)原因可能是在計(jì)算圖的不同部分調(diào)用backward—— 但在這種情況下,你也可以把損失加起來,然后在總和上調(diào)用backward。

常見錯(cuò)誤 #4: 你把做完softmax的結(jié)果送到了需要原始logits的損失函數(shù)中

logits是最后一個(gè)全連接層的激活值。softmax也是同樣的激活值,但是經(jīng)過了標(biāo)準(zhǔn)化。logits值,你可以看到有些是正的,一些是負(fù)的。而log_softmax之后的值,全是負(fù)值。如果看柱狀圖的話,可以看到分布式一樣的,唯一的差別就是尺度,但就是這個(gè)細(xì)微的差別,導(dǎo)致最后的數(shù)學(xué)計(jì)算完全不一樣了。但是為什么這是一個(gè)常見的錯(cuò)誤呢?在PyTorch的官方MNIST例子中,查看forward方法,在最后你可以看到最后一個(gè)全連接層self.fc2,然后就是log_softmax。

但是當(dāng)你查看官方的PyTorch resnet或者AlexNet模型的時(shí)候,你會(huì)發(fā)現(xiàn)這些模型在最后并沒有softmax層,最后得到就是全連接的輸出,就是logits。

這兩個(gè)的差別在文檔中沒有說的很清楚。如果你查看nll_loss函數(shù),并沒有提得輸入是logits還是softmax,你的唯一希望是在示例代碼中發(fā)現(xiàn)nll_loss使用了log_softmax作為輸入。

原文標(biāo)題:收藏 | 使用PyTorch時(shí),最常見的4個(gè)錯(cuò)誤

文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4813

    瀏覽量

    103394
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    809

    瀏覽量

    13909

原文標(biāo)題:收藏 | 使用PyTorch時(shí),最常見的4個(gè)錯(cuò)誤

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的比較

    BP神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)在多個(gè)方面存在顯著差異,以下是對(duì)兩者的比較: 一、結(jié)構(gòu)特點(diǎn) BP神經(jīng)網(wǎng)絡(luò) : BP神經(jīng)網(wǎng)絡(luò)是一種多層的前饋神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 02-12 15:53 ?630次閱讀

    BP神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)的關(guān)系

    ),是一種多層前饋神經(jīng)網(wǎng)絡(luò),它通過反向傳播算法進(jìn)行訓(xùn)練。BP神經(jīng)網(wǎng)絡(luò)由輸入層、一個(gè)或多個(gè)隱藏層和輸出層組成,通過逐層遞減的方式調(diào)整網(wǎng)絡(luò)權(quán)重,目的是最小化
    的頭像 發(fā)表于 02-12 15:15 ?828次閱讀

    人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法

    在上一篇文章中,我們介紹了傳統(tǒng)機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí)和多種算法。在本文中,我們會(huì)介紹人工神經(jīng)網(wǎng)絡(luò)的原理和多種神經(jīng)網(wǎng)絡(luò)架構(gòu)方法,供各位老師選擇。 01 人工神經(jīng)網(wǎng)絡(luò) ? 人工神經(jīng)網(wǎng)絡(luò)模型之所
    的頭像 發(fā)表于 01-09 10:24 ?1164次閱讀
    人工<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>的原理和多種<b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b>架構(gòu)方法

    卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較

    在深度學(xué)習(xí)領(lǐng)域,神經(jīng)網(wǎng)絡(luò)模型被廣泛應(yīng)用于各種任務(wù),如圖像識(shí)別、自然語(yǔ)言處理和游戲智能等。其中,卷積神經(jīng)網(wǎng)絡(luò)(CNNs)和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)是兩種常見的模型。 1. 結(jié)構(gòu)差異 1.1 傳統(tǒng)
    的頭像 發(fā)表于 11-15 14:53 ?1820次閱讀

    RNN模型與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的區(qū)別

    神經(jīng)網(wǎng)絡(luò)是機(jī)器學(xué)習(xí)領(lǐng)域中的一種強(qiáng)大工具,它們能夠模擬人腦處理信息的方式。隨著技術(shù)的發(fā)展,神經(jīng)網(wǎng)絡(luò)的類型也在不斷增加,其中循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)(如前饋
    的頭像 發(fā)表于 11-15 09:42 ?1105次閱讀

    LSTM神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)與工作機(jī)制

    的結(jié)構(gòu)與工作機(jī)制的介紹: 一、LSTM神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu) LSTM神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)主要包括以下幾個(gè)部分: 記憶單元(Memory Cell) : 記憶單元是LSTM網(wǎng)絡(luò)的核心,負(fù)責(zé)在整個(gè)序列處理過程中保持和更新長(zhǎng)期依賴信息。 它主要由
    的頭像 發(fā)表于 11-13 10:05 ?1599次閱讀

    如何編寫一個(gè)BP神經(jīng)網(wǎng)絡(luò)

    傳播過程,即誤差從輸出層反向傳播回輸入層,并據(jù)此調(diào)整網(wǎng)絡(luò)參數(shù)。本文將詳細(xì)闡述如何編寫一個(gè)BP神經(jīng)網(wǎng)絡(luò),包括網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)、前向傳播、損失函數(shù)計(jì)算、反向傳播和參數(shù)更新等關(guān)鍵步驟。
    的頭像 發(fā)表于 07-11 16:44 ?1098次閱讀

    神經(jīng)網(wǎng)絡(luò)優(yōu)化器有哪些

    神經(jīng)網(wǎng)絡(luò)優(yōu)化器是深度學(xué)習(xí)中用于調(diào)整網(wǎng)絡(luò)參數(shù)以最小化損失函數(shù)的重要工具。這些優(yōu)化器通過不同的策略來更新網(wǎng)絡(luò)權(quán)重,以提高訓(xùn)練效率和模型性能。以下是對(duì)幾種常見
    的頭像 發(fā)表于 07-11 16:33 ?1105次閱讀

    神經(jīng)網(wǎng)絡(luò)辨識(shí)模型具有什么特點(diǎn)

    神經(jīng)網(wǎng)絡(luò)辨識(shí)模型是一種基于人工神經(jīng)網(wǎng)絡(luò)的系統(tǒng)辨識(shí)方法,它具有以下特點(diǎn): 非線性映射能力 :神經(jīng)網(wǎng)絡(luò)能夠處理非線性問題,可以很好地?cái)M合復(fù)雜的非線性系統(tǒng)。 泛化能力 :神經(jīng)網(wǎng)絡(luò)通過學(xué)習(xí)大量
    的頭像 發(fā)表于 07-11 11:12 ?862次閱讀

    怎么對(duì)神經(jīng)網(wǎng)絡(luò)重新訓(xùn)練

    重新訓(xùn)練神經(jīng)網(wǎng)絡(luò)是一個(gè)復(fù)雜的過程,涉及到多個(gè)步驟和考慮因素。 引言 神經(jīng)網(wǎng)絡(luò)是一種強(qiáng)大的機(jī)器學(xué)習(xí)模型,廣泛應(yīng)用于圖像識(shí)別、自然語(yǔ)言處理、語(yǔ)音識(shí)別等領(lǐng)域。然而,隨著時(shí)間的推移,數(shù)據(jù)分布可能會(huì)
    的頭像 發(fā)表于 07-11 10:25 ?847次閱讀

    BP神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的關(guān)系

    BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)是兩種在人工智能和機(jī)器學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 07-10 15:24 ?2433次閱讀

    BP神經(jīng)網(wǎng)絡(luò)和人工神經(jīng)網(wǎng)絡(luò)的區(qū)別

    BP神經(jīng)網(wǎng)絡(luò)和人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,簡(jiǎn)稱ANNs)之間的關(guān)系與區(qū)別,是神經(jīng)網(wǎng)絡(luò)領(lǐng)域中一個(gè)基礎(chǔ)且重要的話題。本文將從定義、結(jié)構(gòu)、算法、應(yīng)用及
    的頭像 發(fā)表于 07-10 15:20 ?2247次閱讀

    前饋神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和常見激活函數(shù)

    和激活函數(shù)的非線性變換,能夠?qū)W習(xí)和模擬復(fù)雜的函數(shù)映射,從而解決各種監(jiān)督學(xué)習(xí)任務(wù)。本文將詳細(xì)闡述前饋神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu),包括其組成層、權(quán)重和偏置、激活函數(shù)等,并介紹幾種常見的激活函數(shù)及其特性。
    的頭像 發(fā)表于 07-09 10:31 ?1850次閱讀

    全連接前饋神經(jīng)網(wǎng)絡(luò)與前饋神經(jīng)網(wǎng)絡(luò)的比較

    隨著人工智能技術(shù)的飛速發(fā)展,神經(jīng)網(wǎng)絡(luò)作為其核心組成部分,在各個(gè)領(lǐng)域展現(xiàn)出了強(qiáng)大的應(yīng)用潛力和價(jià)值。在眾多神經(jīng)網(wǎng)絡(luò)類型中,全連接前饋神經(jīng)網(wǎng)絡(luò)(Fully Connected Feedforward
    的頭像 發(fā)表于 07-09 10:31 ?2.1w次閱讀

    matlab的神經(jīng)網(wǎng)絡(luò)app怎么用

    Matlab的神經(jīng)網(wǎng)絡(luò)App是一個(gè)強(qiáng)大的工具,可以幫助用戶快速構(gòu)建、訓(xùn)練和測(cè)試神經(jīng)網(wǎng)絡(luò)模型。 神經(jīng)網(wǎng)絡(luò)基本概念 神經(jīng)網(wǎng)絡(luò)是一種模擬人腦
    的頭像 發(fā)表于 07-09 09:49 ?803次閱讀
    主站蜘蛛池模板: 宝山区| 牡丹江市| 承德市| 林甸县| 天等县| 班戈县| 吉首市| 泾阳县| 林口县| 桦甸市| 广宁县| 五常市| 尼木县| 台州市| 红安县| 松潘县| 安多县| 衡东县| 昭觉县| 浪卡子县| 鄂托克旗| 庆云县| 沙洋县| 韶关市| 德庆县| 马鞍山市| 资溪县| 蓬莱市| 西峡县| 普格县| 南丰县| 赣州市| 昌邑市| 潞城市| 延庆县| 绍兴市| 萝北县| 迁西县| 称多县| 寻乌县| 台东市|