fastai 学习器的要求和批量预测

9
我之前使用fastai库训练了一个resnet34模型,并保存了weights.h5文件。最新版本的fastai,我是否仍需要有非空的train和valid文件夹才能导入我的学习器并在测试集上进行预测?
此外,我目前正在循环遍历每个测试图像,并使用learn.predict_array,但是否有一种方法可以在测试文件夹上批量预测?
以下是我目前正在执行的加载/预测示例:
PATH = '/path/to/model/'
sz = 224
arch=resnet34
tfms = tfms_from_model(resnet34, sz, aug_tfms=transforms_side_on, max_zoom=1.1)
data = ImageClassifierData.from_paths(PATH, tfms=tfms, bs=64)
learn = ConvLearner.pretrained(arch, data, precompute=False)
learn.unfreeze()
learn.load('224_all')

imgs = sorted(glob(os.path.join(test_path, '*.jpg')))
preds = []
_,val_tfms = tfms_from_model(resnet34, 224)
for n, i in enumerate(imgs):
        im = val_tfms(open_image(i))[None]
        preds.append(1-np.argmax(learn.predict_array(im)[0]))

现在肯定有更简洁的方法了吧?

2个回答

5
在fastai中,你现在可以导出和加载学习器来对测试集进行预测,而无需加载非空的训练和验证集。要做到这一点,你应该使用export方法和load_learner函数(两者都定义在basic_train中)。
在你目前的情况下,你可能需要以旧方式加载你的学习器(使用训练/验证数据集),然后导出它,你就可以使用load_learner来对测试集进行预测。
我将留下一个链接到文档:
-https://docs.fast.ai/basic_train.html#Deploying-your-model 这应该可以澄清任何后续的问题。

4
data = ImageClassifierData.from_paths(PATH, tfms=tfms, bs=64)
learn = ConvLearner.pretrained(arch, data, precompute=False)
learn.unfreeze()
learn.load('224_all')

preds = learn.predict(is_test=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接