中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Kaggle首戰(zhàn)斬獲第三,看深度學(xué)習(xí)菜鳥團隊如何一鳴驚人

2019-04-25    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

背靠 fast.ai 庫與視頻教程,首戰(zhàn) Kaggle 競賽,新手在油棕種植園衛(wèi)星圖像識別中獲得第三名。

Women in Data Science 與合作伙伴共同發(fā)起了 WiDS 數(shù)據(jù)馬拉松競賽(WiDS datathon)。賽題是創(chuàng)建一個能夠預(yù)測衛(wèi)星圖像上油棕種植園存在情況的模型。

Planet 和 Figure Eight 慷慨地提供了衛(wèi)星圖像的帶注釋數(shù)據(jù)集,而該衛(wèi)星圖像是最近由 Planet 衛(wèi)星拍攝的。該數(shù)據(jù)集圖像具有 3 米的空間分辨率,并且每一副圖像都基于是否含油棕種植園來標記(0 意為沒有油棕種植園,1 意為存在一個油棕種植園)。

競賽任務(wù)是訓(xùn)練一個模型,該模型能夠輸入衛(wèi)星圖像,輸出包含油棕種植園圖像的似然預(yù)測。在模型開發(fā)中,競賽舉辦者提供帶標簽的訓(xùn)練和測試數(shù)據(jù)集。

詳細信息參見:https://www.kaggle.com/c/widsdatathon2019

我和隊友(Abdishakur、Halimah 和 Ifeoma Okoh)使用 fast.ai 框架來迎接這項賽題。非常感謝 Thomas Capelle 在 kaggle 上的啟動內(nèi)核,該內(nèi)核為解決這個問題提供了諸多見解。

此外,還要感謝 fast.ai 團隊,該團隊創(chuàng)建了一門不可思議的深度學(xué)習(xí)課程,該課程簡化了大量困難的深度學(xué)習(xí)概念。現(xiàn)在,深度學(xué)習(xí)初學(xué)者也可以贏得 kaggle 競賽了。

課程地址:https://course.fast.ai/

從一個通俗易懂的深度學(xué)習(xí)指南開始

不要想著馬上就能理解所有東西,這需要大量的練習(xí)。本指南旨在向深度學(xué)習(xí)初學(xué)者展示 fast.ai 的魅力。假定你了解一些 python 知識,也對機器學(xué)習(xí)稍有涉獵。這樣的話,我們就走上了學(xué)習(xí)正軌。

(引用)本文展示的所有代碼可在 Google Colaboratory 中找到:這是一個 Jupyter 筆記本環(huán)境,不需要進行任何設(shè)置就可以使用,并且完全在云端運行。你可以通過 Colaboratory 編寫和執(zhí)行代碼,保存和分享分析,訪問大量的計算資源,所有這些都是免費的。

代碼參見:https://colab.research.google.com/drive/1PVaRPY1XZuPLtm01V2XxIWqhLrz3_rgX。

導(dǎo)入 fast.ai 和我們將要使用的其他庫

 

 

輸入庫

獲取競賽數(shù)據(jù)

為了盡可能簡潔明了,Abdishakur 上傳競賽數(shù)據(jù)文件至 dropbox.com。你可以在競賽頁面上找到這些數(shù)據(jù)。你需要接受競賽規(guī)則,并在參賽后訪問數(shù)據(jù)。

 

 

觀察數(shù)據(jù)

我們在解決一個問題時首先要做的是觀察可用數(shù)據(jù)。在想出解決方案之前,我們需要理解這個問題以及數(shù)據(jù)是什么樣的。觀察數(shù)據(jù)意味著理解數(shù)據(jù)目錄的構(gòu)成方式、數(shù)據(jù)標簽以及樣本圖像是什么樣的。

 

 

使用 pandas 庫來讀取數(shù)據(jù)。

 

 

訓(xùn)練模型所要使用的數(shù)據(jù)標簽。

處理「圖像分類數(shù)據(jù)集」和「表格數(shù)據(jù)集」的主要區(qū)別在于標簽的存儲方式。這里的標簽指的是圖像中的內(nèi)容。在這個特定的數(shù)據(jù)集中,標簽以 CSV 文件格式存儲。

想要了解更多計算「分數(shù)」列的方法,點擊:

https://success.figure-eight.com/hc/en-us/articles/201855939-How-to-Calculate-a-Confidence-Score。

我們將使用 seaborn 的 countplot 函數(shù)來觀察訓(xùn)練數(shù)據(jù)的分布。我們從下圖中看到,大約 14300 個圖像中沒有發(fā)現(xiàn)油棕種植園,而僅有 942 個圖像中發(fā)現(xiàn)了油棕種植園。這就是所謂的不平衡數(shù)據(jù)集,但我們在這里不討論這個深度學(xué)習(xí)問題。我們此刻正邁出了一小步。

 

 

統(tǒng)計兩個類別的樣本數(shù)。

 

 

訓(xùn)練數(shù)據(jù)集中分布

準備數(shù)據(jù)

提供的測試數(shù)據(jù)放置于兩個不同的文件夾中: leaderboard 留出數(shù)據(jù)和 leaderboard 測試數(shù)據(jù)。由于競賽要求提交這兩種數(shù)據(jù)集的預(yù)測,所以我們將兩者相結(jié)合。我們共獲得 6534 副圖像。

 

 

結(jié)合 leaderboard 留出數(shù)據(jù)和 leaderboard 測試數(shù)據(jù)。

我們將使用 fast.ai 的 DataBlock API 來構(gòu)成數(shù)據(jù),這是一種將數(shù)據(jù)集呈現(xiàn)給模型的簡便方法。

 

 

創(chuàng)建一個 ImageList 來保留數(shù)據(jù)

我們將使用 ImageList 來保存訓(xùn)練數(shù)據(jù),并使用 from_df 方法讀取數(shù)據(jù)。這樣做的原因是,我們將訓(xùn)練集信息儲存在了名為 df 的 DataFrame 中。

接下來需要隨機分割訓(xùn)練集,并保留 20% 作為驗證集,從而在訓(xùn)練中監(jiān)督模型性能。我們選擇了一個 seed,以確保再一次訓(xùn)練時能得到相同的結(jié)果,通過相同的 seed,我們就能知道哪些改進是好的,哪些是壞的。

此外,我們同樣還要把訓(xùn)練集的標簽地址提供給 ImageList,并將數(shù)據(jù)與標簽合并。

最后,還需要在數(shù)據(jù)上執(zhí)行轉(zhuǎn)換,通過設(shè)定 flip_vert = True 將翻轉(zhuǎn)圖像,這能幫助模型識別不同朝向的圖像。此外,還需要使用 imagenet_stats 來歸一化圖像。

預(yù)覽圖像

如下是有或沒有油棕種植園的衛(wèi)星圖像:

 

 

展示兩個 Batch 的圖像。

 

 

有油棕的圖像標記為 1,沒有油棕的標記為 0

訓(xùn)練我們的模型

現(xiàn)在,開始訓(xùn)練我們的模型。我們將使用卷積神經(jīng)網(wǎng)絡(luò)作為主體,并利用 ResNet 模型的預(yù)訓(xùn)練權(quán)重。ResNet 模型被訓(xùn)練用來對各種圖像進行分類,不用擔(dān)心它的理論和實現(xiàn)細節(jié),F(xiàn)在,我們構(gòu)建的模型以衛(wèi)星圖像作為輸入,并輸出這兩個類別的預(yù)測概率。

 

 

卷積神經(jīng)網(wǎng)絡(luò)

 

 

搜索最佳模型學(xué)習(xí)率。

接下來,我們用 lr_find() 函數(shù)找到了理想的學(xué)習(xí)率,并使用 recorder.plot() 對其進行了可視化。

 

 

搜索最佳模型學(xué)習(xí)率。

我們將選擇斜率最大的學(xué)習(xí)率,在這里我們選擇的是 1e-2。

 

 

用學(xué)習(xí)率 1e-2 對模型展開 5 個周期的訓(xùn)練。

我們將使用 fit_one_cycle 函數(shù)對模型進行 5 個 epoch 的訓(xùn)練(遍歷所有數(shù)據(jù) 5 次)。

 

 

訓(xùn)練和驗證損失。

注意展示的 metrics,即 training_loss 和 valid_loss。隨著時間的推移,我們使用它們來監(jiān)控模型的改進。

最佳模型是在第四個 epoch 時獲得的。

 

 

訓(xùn)練階段模型的輸出;訓(xùn)練和驗證損失的變化過程。

在你進行訓(xùn)練和驗證數(shù)據(jù)集時,fast.ai 只在內(nèi)部挑選并保存你的最佳模型。

評估我們的模型

競賽提交的材料是根據(jù)預(yù)測概率和觀測目標 has_oilpalm 之間的 ROC 曲線來評估的。默認情況下,F(xiàn)ast.ai 不會附帶這個指標,所以我們將使用 scikit-learn 庫。

 

 

打印驗證指標。

使用預(yù)訓(xùn)練模型和 fast.ai 的妙處在于,你可以獲得很好的預(yù)測準確率。在我們的案例中,沒有費多大力就獲得了 99.44% 的準確率。

 

 

訓(xùn)練第一階段的指標。

保存模型,并繪制關(guān)于預(yù)測的混淆矩陣。

 

 

使用混淆矩陣查看結(jié)果

 

 

繪制混淆矩陣

混淆矩陣是一種圖形化的方式,可以查看模型準確或不準確的預(yù)測圖像數(shù)量。

 

 

第一個訓(xùn)練階段的混淆矩陣。

從這個矩陣中可以看出,模型準確地預(yù)測出有 2863 張圖像中沒有油棕,168 張圖像中有油棕。10 張有油棕的圖像被分類為沒有,而 7 張沒有油棕的圖像則被分類為有油棕。

對這種簡單的模型來說,這個結(jié)果不錯了。接下來,我們搜索到了訓(xùn)練的理想學(xué)習(xí)率。

 

 

搜索理想的學(xué)習(xí)率。

 

 

我們在學(xué)習(xí)率 1e-6 和 1e-4 之間選擇了一個學(xué)習(xí)率。

在 7 個 epoch 內(nèi),使用 1e-6 和 1e-4 之間的最大學(xué)習(xí)率來擬合模型。

 

 

對模型進行 7 個周期的訓(xùn)練,學(xué)習(xí)率應(yīng)在 1e-6 和 1e-4 范圍內(nèi)。

 

 

訓(xùn)練和驗證損失。

以圖形方式觀察訓(xùn)練指標,以監(jiān)控每個訓(xùn)練周期后模型的性能。

 

 

訓(xùn)練階段模型的輸出;訓(xùn)練和驗證損失的變化過程。

保存模型的第二個訓(xùn)練階段:

 

 

準確率、誤差率和 AUC 分數(shù)

打印模型的準確率、誤差率和 AUC 指標:

 

 

第二個訓(xùn)練階段的指標。

如你所見,模型的準確率從 99.44% 上升到了 99.48%。誤差率從 0.0056 降到了 0.0052。AUC 也從 99.82% 上升為 99.87%。

 

 

繪制混淆矩陣。

與我們繪制的上一個混淆矩陣相比,你會發(fā)現(xiàn)模型的預(yù)測效果更好了。

 

 

第二個訓(xùn)練階段的混淆指標

之前有 7 張不含油棕種植園的圖像被錯誤分類,現(xiàn)在降到了 3 張,這就是進步。

我們在訓(xùn)練和調(diào)參期間遵循了一種模式。大多數(shù)深度學(xué)習(xí)實驗都遵循類似的迭代模式。

圖像轉(zhuǎn)換

我們將在數(shù)據(jù)上執(zhí)行更多的圖像轉(zhuǎn)換,這應(yīng)該是能提升模型效果的。圖像轉(zhuǎn)換的具體描述可以在 fast.ai 文檔中找到:

 

 

應(yīng)用不同的轉(zhuǎn)換以提升模型效果

max_lighting:如果超參不為 None,那么以 p_lighting 為概率隨機進行亮度、對比度的調(diào)整,且最大亮度不超過 max_lighting。

max_zoom:如果超參不小于 1,那么以 p_affine 為概率隨機放大 1 到 max_zoom 倍。

max_warp:如果超參不為 None,那么以 p_affine 為概率在-max_warp 和 max_warp 之間隨機對稱變換。

我們再一次搜索最優(yōu)學(xué)習(xí)率:

 

 

搜索一個合理的學(xué)習(xí)率

 

 

我們選擇的學(xué)習(xí)率是 1e-6

將模型訓(xùn)練 5 個周期。

 

 

訓(xùn)練 5 個周期

 

 

訓(xùn)練和驗證損失

比較訓(xùn)練指標,并與過去的指標進行比較。我們的模型在這次迭代中略遜于 0.0169 和 0.0163。先不要泄氣。

 

 

訓(xùn)練階段模型的輸出;在第 3 個 epoch 時得到最佳模型

保存模型訓(xùn)練的第三個階段并打印出指標。如圖所示,當(dāng)前模型的準確率為 99.38,上一個階段的準確率為 99.48%。AUC 分數(shù)從 99.87% 提高到了 99.91%,這是比賽評分的標準。

 

 

準確率、誤差率和 AUC 分數(shù)

 

 

第三個訓(xùn)練階段的指標

最終訓(xùn)練階段

你可能注意到了,我們剛開始使用的圖像大小為 164,然后逐漸增加到 256(如下所示)。這么做是為了利用 fast.ai 用于分類的漸進式圖像大小縮放,即在一開始使用小圖像,之后隨著訓(xùn)練逐漸增加圖像大小。如此一來,當(dāng)模型早期非常不準確時,它能迅速看到大量圖像并實現(xiàn)快速改進,而在后期訓(xùn)練中,它可以看到更大的圖像,學(xué)到更多細粒度的差別。(詳情請參見:現(xiàn)在,所有人都可以在 18 分鐘內(nèi)訓(xùn)練 ImageNet 了)

 

 

應(yīng)用不同的變換來改進模型,將圖像大小增加到 256

我們又發(fā)現(xiàn)了一個最佳學(xué)習(xí)率。

 

 

找到理想學(xué)習(xí)率

 

 

找到理想的學(xué)習(xí)率

以 1e-4 的學(xué)習(xí)率訓(xùn)練 5 個 epoch 以擬合模型。

 

 

以 1e-4 的學(xué)習(xí)率對模型訓(xùn)練 5 個周期

 

 

訓(xùn)練和驗證損失

觀察訓(xùn)練指標并與之前的指標對比。我們的模型有了小小的提升(損失從 0.169 降到了 0.168)。

 

 

模型訓(xùn)練階段的輸出。在第 2 個 epoch 時得到最佳模型

保存模型最后的訓(xùn)練階段并打印出指標。

 

 

準確率、誤差率和 AUC 分數(shù)

如下所示,模型的準確率為 99.44%,優(yōu)于上一個訓(xùn)練階段 99.38% 的準確率。

 

 

第四個訓(xùn)練階段的指標

準備一個競賽提交文件

現(xiàn)在可以看到我們的模型對未見過的數(shù)據(jù)做出了多么好的預(yù)測。

 

準備一個 CSV 提交文件

 

將文件提交給 WiDS Datathon

你仍然可以參加 WiDS 競賽并晚一點提交。進入?yún)①愴撁,點擊「Join Competition」,了解比賽規(guī)則。現(xiàn)在你可以提交作品,看看自己會排到第幾。

 

根據(jù)模型預(yù)測對提交的作品進行打分

 

原文鏈接:https://towardsdatascience.com/how-a-team-of-deep-learning-newbies-came-3rd-place-in-a-kaggle-contest-644adcc143c8

標簽: [db:TAGG]

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:數(shù)據(jù)豐富的企業(yè)將重點轉(zhuǎn)向道德數(shù)據(jù)挖掘

下一篇:Python的高級特征你知多少?來對比看看