我以前使用fastai库训练了一个resnet34模型,并保存了weights.h5文件。使用最新版本的fastai,是否仍需要具有非空的训练和有效的文件夹才能导入我的学习者并在测试集上进行预测?
此外,我目前正在遍历每个测试图像并使用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]))
现在必须有一种更清洁的方式来做到这一点,不是吗?
答案 0 :(得分:2)
在fastai中,您现在可以导出并加载学习者以对测试集进行预测,而不必加载非空的训练和验证集。为此,您应该使用export
方法和load_learner
函数(均在basic_train中定义)。
在当前情况下,您可能必须按旧方式(使用训练/有效数据集)加载学习者,然后将其导出,然后才能使用load_learner
对测试进行预测设置。
我将保留指向文档的链接:
-https://docs.fast.ai/basic_train.html#Deploying-your-model
这应该澄清所有后续问题。
答案 1 :(得分: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)