Kaggle上有免費供大家使用的GPU計算資源,本文教你如何使用它來訓練自己的神經網絡。

Kaggle是什么
Kaggle是一個數據建模和數據分析競賽平台。企業和研究者可在其上發布數據,統計學者和數據挖掘專家可在其上進行競賽以產生最好的模型。
在Kaggle,你可以:
-
參加競賽贏取獎金。
Kaggle上會發布一些賽題,做的好會贏得獎金。 -
下載數據集。
Kaggle上包含了眾多的數據集供大家免費下載,常見的數據集都可以在上面找到。 -
學習別人的代碼。類似
GitHub,你可以在Kaggle上學習冠軍的代碼來強化數據科學技能。 -
免費使用計算資源。
Kaggle的Kernels功能允許你在瀏覽器編程、並通過服務器的GPU來加速你的計算。 -
討論交流學習。
Kaggle上有論壇交流功能,允許你與相同的愛好者一起交流學習。 -
學習
Python、ML、Pandas、DL等技能。Kaggle上提供了免費的微課給大家學習,供初學者快速入門學習。
本篇文章側重點是第4條,教你如何將自己的代碼丟到Kaggle上訓練。
注意,Kaggle目前只支持Python和R兩種編程語言。
Kernel硬件配置
GPU:Nvidia Tesla P100-PCIE-16GB 1.3285GHz
GPU連續使用時間:6h
CPU Frequency: 2.3GHz
RAM:14GB
Disk:5.2GB
使用教程
基本介紹
-
登陸
Kaggle官網,注冊賬號並登陸。在Kaggle注冊賬號是免費的。 -
點擊導航欄的
Kernels

- 點擊頁面上部的
New Kernel來創建一個新的Kernel。粗略地說Kernel就是一個代碼的工程項目。

- 點擊左邊的
Script來創建一個腳本。這個腳本就是你項目運行的主要文件。

- 頂部的標題欄的功能。

- 側邊狀態欄的主要功能。
Sessions顯示資源占用狀態,Versions顯示版本管理,Draft Environment顯示你上傳數據(注意:上傳后該區域只讀,不能寫),Settings顯示設置(如GPU開關、包的管理)

- 底部狀態欄功能。

用完Kernel建議點擊類似電源鍵的按鈕關閉Kernel哦(關閉后所有輸出文件將會丟失)
- 代碼輸入窗口。它已預先幫你輸入一些示例代碼,可以刪掉重寫。

使用示例
我們以Tensorflow平台的YoloV3-Tiny模型在數據集VOC2007的訓練為例,介紹如何使用Kaggle訓練我們的模型,並保存結果,將模型下載到本地。
提示:Kaggle已經為我們准備好常用的環境了,無需我們從頭搭建開發環境。一般直接用就好了。
文件准備
首先我們要在本地弄好相關文件,再上傳到Kaggle上去。
本地的准備參考這篇:【AI實戰】動手訓練自己的目標檢測模型(YOLO篇)
有關YOLO參考這篇:用YOLO實現目標檢測
然后按照實際情況修改train.py的相關參數,例如將batch_size改成128,epochs改小一點等等。
注意訓練時間不能超過6個小時,否則Kaggle會自動關閉你的Kernel。
並且Keras版的YOLO的標簽文件與Darknet版的不同,標簽文件要重新生成。然后執行:
1 |
cat 2007_train.txt 2007_val.txt > train.txt |
即我們使用驗證集和訓練集混合起來一起訓練,最后替換下路徑前綴。
但有以下幾點要注意下:
-
上傳后不能在線修改你上傳的東西,只能刪除該壓縮包(刪除方法見第三節:再次訓練)后重新上傳(如果數據量巨大,重新上傳十分費時)。所以最好需要確保第一次上傳的東西就沒有問題,否則更改會比較繁瑣。
-
上傳時,建議是分別上傳幾樣東西(分別壓縮打包上傳):
- 模型的配置文件
- 訓練的數據文件
- 模型
.h5文件
上傳方式:點擊右側白色的側邊狀態欄中的+ Add Data按鈕,在彈出的窗口中,點擊右上角的Upload,然后選擇文件去上傳(只能上傳單個文件,這就是為什么叫你打包壓縮的原因)。
上傳后,Kaggle會自動幫你解壓縮,點擊右邊的文件樹,點選其中的一個文件,會在左側彈出白色的文件管理彈窗,彈窗的上端會顯示該文件的路徑:

點擊中間的那個藍色的按鈕你可以復制路徑到剪切板中。
當你上傳了多個壓縮包或文件時,路徑的命名規則一般是這樣的:
- 對於上傳了文件:
../input/數據集的名字/上傳的文件名字 - 對於上傳了壓縮包:
../input/數據集的名字/壓縮包的名字/壓縮包底下的路徑
-
其中上述的
圖片路徑的.txt文件不能單純按照【AI實戰】動手訓練自己的目標檢測模型(YOLO篇)來做,你要將路徑替換成上述第二點描述的那樣。因為你執行的主腳本文件並不是在你上傳的東西里面,你需要使用類似../input/XXX/XXX的格式來調用你上傳的東西。 -
對於腳本中的文件路徑也是如此,類似於上述的第三點來做。否則會提示會找不到你上傳的文件。實際上有關路徑的一切東西都要按照上述的路徑規則來做,否則就找不到文件。
-
如果提示
import時找不到文件,這是因為你上傳的包沒有加入系統變量,那么你需要:1
2
3import sys
kaggle_path_prefix = "../input/keras-yolov3tiny-voc2007/keras-yolo3/"
sys.path.append(kaggle_path_prefix)
這里請根據你的實際情況修改上述kaggle_path_prefix的值。
這里kaggle_path_prefix目錄下需要包含那個你剛剛上傳的壓縮包里名叫yolo3的Python包的文件夾。
- 保存文件的路徑請直接填寫文件名,像這樣:
1 |
model.save_weights('trained_weights_final.h5') |
這是因為input文件夾是只讀的,且保存到其他地方去無法輸出下載,你也找不到輸出的文件。況且當Kernel關閉后你的一切東西就會丟失。
運行並提交
點擊頂部標題欄亮起的藍色Commit按鈕,以運行全部代碼並保存結果,最后它會保存你輸出的文件。
如果允許的窗口不慎點沒了,可以右側的Versions中,點擊:

重新彈出運行的窗口(除非你點了Cancel commit)。

運行完畢后,點擊:

來打開Kernel頁面。
如果你有輸出文件,在左側的:

點擊Output就可以切換到輸出的文件列表,然后就可以下載你輸出的文件啦,選中你想要的模型下載即可。
如果運行出錯,請點擊上圖所示的Log查看錯誤日志(有必要時點擊Download Log按鈕下載日志到本地),按照錯誤提示修復錯誤即可。
再次訓練
只需將原本的模型文件數據集刪除,然后再添加上傳上去,再次Commit就好了。
刪除數據集的步驟:
-
點擊數據集旁邊的那個紅色的叉叉,將數據集從當前
Kernel移除 -
點擊自己的頭像,進入
My Profile頁面,然后點擊Datasets

- 然后點擊
Settings

- 最后點擊
Delete Dataset並確認即可

