日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fastai-竞赛实战

發布時間:2024/4/11 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fastai-竞赛实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

競賽實戰

簡介

可以說,Fastai的出現給Kaggle上很多以遷移學習為主的比賽帶來了新的方法,沖擊了很多傳統框架,因為Fastai的封裝更多更詳細,使用者更方便。本文以一個簡單的分類賽為例,介紹如何在Kaggle中使用Fastai取得不錯的成績。本文只列舉代碼的細節,主要是Fastai解決視覺問題的Pipeline,具體框架用法不多設計,我的系列博客已經具體講解了。

賽題

比賽鏈接,老生常談的MNIST手寫體分類,是Kaggle上一個入門級別的賽事,關于Kaggle賽事級別類型等可以參考我的博客。

由于給出的數據集為表格數據,預先處理為了本地的JPG圖片并按照ImageNet數據集的風格進行文件存儲,方便Fastai
讀取。

數據準備

本地數據集的存放格式如下。

mnist\train\0\1\2\...9\test\

Fastai要讀取這個數據集非常簡單,使用ImageDataBunch的from_folder方法即可,讀取之后這里按照ImageNet的統計信息進行了標準化。

tfms = transform.get_transforms(do_flip=False, max_rotate=5.0) # 數據變換db = ImageDataBunch.from_folder("../train/",test="../test/",valid_pct=0.15, # 劃分訓練集bs=64,size=224,ds_tfms=tfms, ) db = db.normalize(imagenet_stats)

得到的數據集輸出信息如下。

ImageDataBunch;Train: LabelList (35700 items) x: ImageList Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224) y: CategoryList 5,5,5,5,5 Path: ../train;Valid: LabelList (6300 items) x: ImageList Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224) y: CategoryList 5,9,9,9,0 Path: ../train;Test: LabelList (28000 items) x: ImageList Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224),Image (3, 224, 224) y: EmptyLabelList ,,,, Path: ../train

學習器構建

通過cnn_learner方法根據resnet模型構建學習器并采用在Imagenet上預訓練的參數,成功構建學習器。

learn = learner.cnn_learner(db, models.wide_resnet50_2, metrics=[accuracy, ], model_dir="/tmp/models", callback_fns=ShowGraph)

上面設置了數據集、模型、指標、模型存放地址以及預先添加的回調,這種回調添加方式表示自動依據當前learner創建默認參數的回調對象而不必像fit時那樣初始化對象,通常,這種方法更加普遍。

模型訓練

首先通過LR_Finder來搜索合適的學習率(只需要調用學習器的lr_find方法),最后確定了合適的學習率區間。

learn.unfreeze() # 解凍所有層 learn.lr_find() # 迭代找尋最優學習率 learn.recorder.plot()

接著,按照合適的學習率區間使用one cycle策略進行50輪的訓練(解凍所有層),結果如下。

推理分析

利用learner生成解釋器,可視化識別最差的圖片以及混淆矩陣。

interpreter.plot_top_losses(6)

interpreter.plot_confusion_matrix()

然后,進行測試集上的結果推理,這里注意的是數據集讀取的API不是按照要求輸出的編號順序來的,是亂序的,輸出的時候要糾正順序再寫入提交的csv文件。

score, y = learn.get_preds(fastai.vision.DatasetType.Test) lab = np.argmax(score, axis=1) Id = [int(os.path.splitext(filename)[0]) + 1 for filename in os.listdir(test_folder)] # 還原id df_submit['ImageId'] = Id df_submit['Label'] = lab

結果提交

得到了合適的CSV文件就可以在平臺上進行提交,平臺很快會給出public測試的分數,本比賽采用的是準確率作為指標,上述數十行代碼獲得的得分為0.99700,排名為161/2292,而這只是一個baseline代碼,這說明,fastai在比賽這個領域是非常實用的框架,且它支持PyTorch的一切功能,對PyTorch的用戶也非常友好。

補充說明

本文主要演示了使用Fastai在比賽中如何構建一個Pipeline的baseline,具體代碼開源于我的Github,歡迎star或者fork。

總結

以上是生活随笔為你收集整理的Fastai-竞赛实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。