fastai 中unfreeze與precompute False的區別是什麼?

時間 2021-10-30 00:59:52

1樓:肥波喇齊

作者可能對兩者具體的作用有點混淆了,在這裡先解釋一下兩者的具體作用。

unfreeze

在fastai課程中使用的是預訓練模型,模型卷積層的權重已經提前在ImageNet 上訓練好了,在使用的時候一般只需要在預訓練模型最後一層卷積層後新增自定義的全連線層即可。卷積層預設是freeze的,即在訓練階段進行反向傳播時不會更新卷積層的權重,只會更新全連線層的權重。在訓練幾個epoch之後,全連線層的權重已經訓練的差不多了,但accuracy還沒有達到你的要求,這時你可以呼叫unfreeze然後再進行訓練,這樣在進行反向傳播時便會更新卷積層的權重(一般不會對卷積層權重進行較大的更新,只會進行一點點的微調,越靠前的卷積層調整的幅度越小,所以有了differential learning rate 這一想法)

precompute

當precompute=True時,會提前計算出每乙個訓練樣本(不包括增強樣本)在預訓練模型最後一層卷積層的activation, 並將其快取下來,之後在訓練階段進行前向傳播的時候,直接將precompute 的activation 作為後面全連線層(FC Layer)的輸入,這樣便省去前面卷積層進行前向傳播的計算量,減少訓練所需時間(這種優勢在epoch比較大的時候能夠顯著0提高訓練速度)。當precompute=False時,則不會提前計算訓練樣本的activation,每乙個epoch都需要重新將訓練樣本+增強樣本(前提是進行了增強操作)進行卷積層的前向傳播,然後進行反向傳播更新對應的權重。

總結一下:

當precompute=True時:

1. 增強樣本不會參與訓練;

2. 不管你的模型是unfreeze還是freeze都不會更新卷積層的權重,因為activation已經提前計算好了,如果你想要更新卷積層權重,必須把precompute設定為False。

當 precompute=False時 :

如果有增強樣本,增強樣本這時便會參與模型訓練;

如果模型為unfreeze狀態,在進行反向傳播的時候便會更新卷積層的權重。

為什麼有蘇中,沒有魯中,粵中,皖中,鄂中?

拉倒吧,高郵寶應都北到淮安了,你還要強迫啟東,海門,靖江,跟你們一起並稱蘇中嗎?可笑至極,老揚泰如果覺得被蘇南人歧視的發了狂,誓要和北劃清界限,沉溺於蘇中不可自拔,建議建立蘇中特別行政區,自己high去,對了,把高郵寶應先劃給鹽城,淮安 還不是剛撥 一抹金色的陽光 山東的話,一般是半島內陸地區,魯中...

這句話中unser aller Leben中all的詞尾為什麼是er?

楊微粒 說起wir的第二格是unser,我想到了這個 Vater unser im Himmel,geheiligt werde dein Name.Vaterunser Wikipedia在天我等父者,我等願爾名見聖。Vater unser unser Vater 因為這裡的 all 修飾的是 u...

Angular中import from 中的 的作用是什麼?

1.因為NPM上的公共包需要命名,而命名存在重名情況,對應特定專案下使用的包或者防止重名,可以用下scope package。有點類似於JS防止全域性變數汙染的,比如a是個全域性變數,但是怕被其他程式設計師寫的汙染,就會弄個dog.a或者pig.a 2.npm上管理的還有種情況也是scope pac...