PaddlePaddle入門之CV疫情特輯

2021-10-04 20:25:28 字數 2001 閱讀 3705

下面總體來介紹下這個課程,課程分為6個課節,從實際專案出發,結合當前疫情情況,推出了新冠疫情視覺化,手勢識別,車牌識別,口罩分類等專案,以及最後的飛漿常規賽《**密度檢測》,包括了解並使用paddlehub(paddle的預訓練模型整合庫),paddleslim模型壓縮工具。

課程需要一定的python以及深度網路基礎的,不然學起來比較吃力

課程主要是涉及深度網路模型架構,及引數調優,模型訓練等;以下就從課程的模型訓練時,loss不下降的問題講講個人總結的一點經驗

當乙個資料集雜訊過多,或者資料標註有大量錯誤時,會使得神經網路難以從中學到有用的資訊,從而出現搖擺不定的情況。實際工作或各種比賽中提供的資料集一般來說都會存在雜訊資料,比如類別標註錯誤。這種情況下可以先用一些預訓練模型對資料集進行top n**(例如經典的kaggle貓狗大戰,資料集裡就存在很多標註錯誤,具體處理方法可以參考知乎大神凌藍風的文章《異常值檢測》)

另外,類別的不平衡也會使得較少類別由於資訊量不足,難以習得本質特徵。此問題可以使用影象增強技術,採用影象旋轉,模糊處理,多影象合成等生成新的訓練資料,增加資料集,使類別盡量保持平衡。

未進行歸一化會導致尺度的不平衡,因此會導致誤差變大。例如不同的特徵向量取值範圍不同,特徵向量1取值範圍為[0,255],特徵向量二取值範圍為[500,1000],但這兩個特徵向量之間並無相關性;甚至不同的特徵向量的度量單位都不一樣。但對於模型來說,它們的輸入值數值確實有大小之分。因此,資料集在傳入模型之前,必須通過縮放,one-hot等方法使得特徵的數值分布更接近一些。

不打亂資料集的話,會導致網路在學習過程中產生一定的偏見問題。比如類別一和類別二常常出現在同一批資料中,那麼結果就是,神經網路看見了類別一就會「想起」類別二,造成梯度更新時,出現錯誤的固定的梯度走向,使得資料集的豐富度降低了。資料打亂後,梯度的走向會更豐富,也能更好地在整個資料集上學習到最有用的隱含特徵。

batch size過小,會導致模型後期搖擺不定,遲遲難以收斂,而過大時,模型前期由於梯度的平均,導致收斂速度過慢。一般batch size 的大小常常選取為16,32,64等8的整數倍,但一般情況下不要超過256;取決於伺服器的記憶體大小。不過在並列或者分布式訓練過程中,可以適當增大。

當模型結構不好或者規模太小/太大時,其對於資料的擬合能力就會不足。如果乙個模型的結構有問題,那麼它就很難訓練,通常,自己設計的網路結構可能很難適應實際問題。通過參考別人已經設計好並實現和測試過的結構,以及特徵工程方案,進行改進和適應性修改,可以更快更好的完成目標任務。可以利用遷移學習將一些成熟的模型用於自己的資料集訓練,比如vggnet,resnet,mobelnet等

卷積神經網路中,卷積層的輸出,一般使用relu作為啟用函式,因為可以有效避免梯度消失,並且線性函式在計算效能上面更加有優勢。而迴圈神經網路中的迴圈層一般為tanh,或者relu,全連線層也多用relu,只有在神經網路的輸出層,使用全連線層來分類的情況下,才會使用softmax這種啟用函式。

神經網路在訓練之前,我們需要給其賦予乙個初值,但是如何選擇這個初始值往往非常重要。常用的初始化方案有全零初始化、隨機正態分佈初始化和隨機均勻分布初始化等。也可以使用batch normal

l1 l2和dropout是防止過擬合用的,當訓練集loss下不來時,就要考慮一下是不是正則化過度,導致模型欠擬合了。一般在剛開始是不需要加正則化的,過擬合後,再根據訓練情況進行調整。如果一開始就正則化,那麼就難以確定當前的模型結構設計是否正確了,而且除錯起來也更加困難。

損失函式方面的選取,也是需要根據任務型別,選取最合適的。對於一些分類任務,通常使用交叉熵損失函式,回歸任務使用均方誤差、smooth_l1 loss,有自動對齊的任務使用ctc loss等。損失函式相當於模型擬合程度的乙個評價指標,這個指標的結果越小越好。乙個好的損失函式,可以在神經網路優化時,產生更好的模型引數。

神經網路的優化器選取一般選取adam,但是在有些情況下adam難以訓練,這時候需要使用如sgd之類的其他優化器。學習率決定了網路訓練的速度,但學習率不是越大越好,當網路趨近於收斂時應該選擇較小的學習率來保證找到更好的最優點。有一些常用的學習率排程器比如指數衰減,多項式衰減,分段衰減等,具體使用哪種排程器,需要多加嘗試,看哪種調優效果最好

深度學習框架之paddlepaddle

碼雲倉庫 簡介那麼,paddlepaddle 有什麼特點?支援多種深度學習模型 dnn 深度神經網路 cnn 卷積神經網路 rnn 遞迴神經網路 以及 ntm 這樣的複雜記憶模型。基於 spark,與它的整合程度很高。支援 python 和 c 語言。支援分布式計算。作為它的設計初衷,這使得 pad...

paddlepaddle七日入門營心得

遇見paddlepaddle入門營的課是看了一篇推送,再決定加入之前,還猶豫了很久,因為以前主要接觸的是tensorflow的知識,最後決定試一試這個框架,就報名了。內容首先概括一下,入門營一共是七天的內容,包括 day01 新冠疫情視覺化 day02 手勢識別 day03 車牌識別 day04 口...

PaddlePaddle視覺化之VisualDL

如何對模型進行視覺化,我們可以用keras手動繪圖輸出cnn訓練的中途結果,本篇文章將講述如何用paddlepaddle新開源的visualdl來進行視覺化。在講visualdl之前,我們先了解一下常用的tensorflow的視覺化工具 tensorboard。tensorflow的視覺化 tens...