如何重复使用经过培训的fastai模型?

时间:2018-03-21 04:34:29

标签: python scikit-learn deep-learning pytorch resnet

如何使用PyTorch上的fastai实现加载预训练模型?就像在SkLearn中一样,我可以使用pickle将模型转储到文件中,然后加载并稍后使用。我在声明像bellow这样的学习实例之后使用.load()方法加载以前保存的权重:

arch=resnet34
data = ImageClassifierData.from_paths(PATH, tfms=tfms_from_model(arch, sz))
learn = ConvLearner.pretrained(arch, data, precompute=False)
learn.load('resnet34_test')

然后预测图像的类别:

trn_tfms, val_tfms = tfms_from_model(arch,100)
img = open_image('circle/14.png')
im = val_tfms(img)
preds = learn.predict_array(im[None])
print(np.argmax(preds))

但它让我错误:

ValueError: Expected more than 1 value per channel when training, got input size [1, 1024]

如果我使用learn.fit(0.01, 3)而不是learn.load(),则此代码有效。我真正想要的是避免在我的应用程序中的训练步骤。

3 个答案:

答案 0 :(得分:2)

只要您的一批数据包含单个元素,就会发生此错误。

解决方案1 ​​: 在learn.load('resnet34_test')

之后调用learn.predict()

解决方案2 : 从训练集中删除1个数据点。

Pytorch issue

Fastai forum issue description

答案 1 :(得分:1)

对于某些批次,这可能是批量大小等于1的边缘情况。确保你们没有批次= 1(主要是最后一批)

答案 2 :(得分:-1)

在训练中,如果训练集中有1个数据,则会出现此错误。

如果您使用模型来预测输出,请确保设置

  

learner.eval()