fastai 学习者要求和批量预测

fastai learner requirements and batch prediction

我之前使用 fastai 库训练了一个 resnet34 模型,并保存了 weights.h5 文件。使用最新版本的 fastai,我还需要非空训练和有效文件夹才能导入我的学习器并在测试集上进行预测吗?

此外,我目前正在循环遍历每个测试图像并使用 learn.predict_array,但是有没有办法在测试文件夹上进行批量预测?

我目前正在做的事情的例子 load/predict:

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]))

现在必须有更简洁的方法来执行此操作,不是吗?

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)

在 fastai 中,您现在可以导出和加载学习器以对测试集进行预测,而无需加载非空的训练和验证集。为此,您应该使用 export 方法和 load_learner 函数(均在 basic_train 中定义)。

在您目前的情况下,您可能必须以旧方式加载您的学习器(使用 train/valid 数据集),然后将其导出,您将能够使用 load_learner 来完成您的任务对您的测试集的预测。

我将 link 留给文档:

-https://docs.fast.ai/basic_train.html#Deploying-your-model

这应该可以澄清任何后续问题。