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

Python 如何重新使用经过培训的fastai模型?,python,scikit-learn,deep-learning,pytorch,resnet,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, p

如何在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()
,则此代码有效。我真正想要的是避免应用程序中的培训步骤

这可能是一种边缘情况,其中某些批次的批次大小等于1。确保没有批处理=1(大部分是最后一批)

每当一批数据包含单个元素时,就会发生此错误

解决方案1: 在learn.load('resnet34_test')之后调用learn.predict()

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


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

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

learner.eval()

最好的方法是打印模型的细节以及预训练模型中张量的名称和形状,以查看出了什么问题。从你目前的描述来看,不清楚实际问题是什么。