接著上篇鹅搪,我們已經(jīng)在kaggle的notebook上導(dǎo)入了數(shù)據(jù)集,并且使用數(shù)據(jù)集訓(xùn)練了模型的最后幾層矫俺。這一篇將帶領(lǐng)大家完成預(yù)測(predict)功能阳仔,以及最后的提交(submission)。
從預(yù)測接著說吧怯疤。
1.預(yù)測
np.set_printoptions(precision=6, suppress=True)
test_result = learner.get_preds(ds_type=DatasetType.Test)
第一行為設(shè)置numpy輸出格式(可選)
通過調(diào)用fastai的get_preds方法批量預(yù)測浆洗,參數(shù)DatasetType.Test則告訴程序自動尋找test數(shù)據(jù)測試集合
for i in range(0, 12):
print(np.array(test_result[0][1][i*10:i*10+10]))
返回結(jié)果如圖所示:可以看到有一個值會特別高,這就是這條數(shù)據(jù)所對應(yīng)的分類所在的位置集峦。
2.提交
pd.options.display.float_format = '{:.6f}'.format
df = pd.DataFrame(np.array(test_result[0]))
df.columns = data.classes
df.head()
這里按照要求進行了數(shù)據(jù)的格式化伏社,默認會以指數(shù)形式輸出抠刺,這里用6位小數(shù)的浮點數(shù)來輸出。
使用df.head()來確認一下數(shù)據(jù)洛口。
返回結(jié)果如圖所示:
df.insert(0, "id", [e.name[:-4] for e in data.test_ds.x.items])
在fastai v1.0中妨马,每個圖片的文件名將存放在x.items.name中挺举,所以我們這里需要把文件名最后的'.jpg'從字符串里面去除掉,只保留id烘跺。然后再次調(diào)用df.head()查看結(jié)果湘纵。
返回結(jié)果如圖所示:完美!
這里我們已經(jīng)將所有的預(yù)測結(jié)果整理成了要求的提交格式滤淳。接著我們就可以導(dǎo)出csv文件了梧喷。
df.to_csv(f"dog-breed-identification-submission.csv", index=False)
好了。notebook中添加完這些內(nèi)容之后脖咐,接著點擊kaggle notebook上方的藍色commit按鈕铺敌,便會上傳整個notebook并且自動運行,然后自動發(fā)布一個執(zhí)行結(jié)果的網(wǎng)頁屁擅。整個commit會花費一些時間運行腳本偿凭。
如圖所示,圖片的上半部分則是一個https的kaggle站內(nèi)網(wǎng)頁鏈接派歌,可以直接訪問弯囊。kaggle的其他用戶可以通過這個頁面查看到你的notebook。圖片的下半部分則是commit的log部分胶果。整個commit過程成功的話會顯示Completed (code 0)
訪問這個生成的notebook網(wǎng)頁匾嘱,找到output部分可以看到,有一個submit to competition的按鈕早抠,點擊它霎烙,我們的結(jié)果就會被提交到對應(yīng)的比賽中啦^^
提交之后可以看到綠色的Complete,以及我們的成績Score贝或。如果是紅色的Failed說明你提交的csv還有些問題吼过。
OK,我們在Kaggle的第一個submission就完成啦咪奖。
如果有問題盗忱,歡迎來評論區(qū)留言討論^^
參考鏈接
120-dogbreeds-fast-ai-v1-0-x-my-version(kaggle notebook)
使用fastai進行圖像分類之120種小狗
Python_數(shù)據(jù)處理_pandas