【问题标题】:fastai learner requirements and batch predictionfastai 学习者需求和批量预测
【发布时间】:2023-03-20 06:48:01
【问题描述】:

我之前使用 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]))

现在一定有一种更清洁的方法可以做到这一点,不是吗?

【问题讨论】:

    标签: python-3.x machine-learning batch-processing predict fast-ai


    【解决方案1】:

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

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

    我会留下一个文档链接:

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

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

    【讨论】:

      【解决方案2】:
      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-01
        • 2016-11-03
        • 1970-01-01
        • 2012-09-02
        • 2020-05-15
        • 2021-10-17
        • 2019-01-01
        • 2014-12-06
        相关资源
        最近更新 更多