接着上篇,我们已经在kaggle的notebook上导入了数据集,并且使用数据集训练了模型的最后几层。这一篇将带领大家完成预测(predict)功能,以及最后的提交(submission)。
从预测接着说吧。
1.预测
np.set_printoptions(precision=6, suppress=True)
test_result = learner.get_preds(ds_type=DatasetType.Test)
第一行为设置numpy输出格式(可选)
通过调用fastai的get_preds方法批量预测,参数DatasetType.Test则告诉程序自动寻找test数据测试集合
for i in range(0, 12):
print(np.array(test_result[0][1][i*10:i*10+10]))
返回结果如图所示:可以看到有一个值会特别高,这就是这条数据所对应的分类所在的位置。
2.提交
pd.options.display.float_format = '{:.6f}'.format
df = pd.DataFrame(np.array(test_result[0]))
df.columns = data.classes
df.head()
这里按照要求进行了数据的格式化,默认会以指数形式输出,这里用6位小数的浮点数来输出。
使用df.head()来确认一下数据。
返回结果如图所示:
df.insert(0, "id", [e.name[:-4] for e in data.test_ds.x.items])
在fastai v1.0中,每个图片的文件名将存放在x.items.name中,所以我们这里需要把文件名最后的'.jpg'从字符串里面去除掉,只保留id。然后再次调用df.head()查看结果。
返回结果如图所示:完美!
这里我们已经将所有的预测结果整理成了要求的提交格式。接着我们就可以导出csv文件了。
df.to_csv(f"dog-breed-identification-submission.csv", index=False)
好了。notebook中添加完这些内容之后,接着点击kaggle notebook上方的蓝色commit按钮,便会上传整个notebook并且自动运行,然后自动发布一个执行结果的网页。整个commit会花费一些时间运行脚本。
如图所示,图片的上半部分则是一个https的kaggle站内网页链接,可以直接访问。kaggle的其他用户可以通过这个页面查看到你的notebook。图片的下半部分则是commit的log部分。整个commit过程成功的话会显示Completed (code 0)
访问这个生成的notebook网页,找到output部分可以看到,有一个submit to competition的按钮,点击它,我们的结果就会被提交到对应的比赛中啦^^
提交之后可以看到绿色的Complete,以及我们的成绩Score。如果是红色的Failed说明你提交的csv还有些问题。
OK,我们在Kaggle的第一个submission就完成啦。
如果有问题,欢迎来评论区留言讨论^^
参考链接
120-dogbreeds-fast-ai-v1-0-x-my-version(kaggle notebook)
使用fastai进行图像分类之120种小狗
Python_数据处理_pandas