9

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

另外,我目前正在遍历每个测试图像并使用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]))

现在必须有一种更清洁的方法来做到这一点,不是吗?

4

2 回答 2

5

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

在您当前的情况下,您可能必须以旧方式(使用训练/有效数据集)加载您的学习器,然后将其导出,您就可以使用它对load_learner您的测试集进行预测。

我将留下文档链接:

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

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

于 2019-03-04T10:00:03.700 回答
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)
于 2019-02-20T05:58:42.933 回答