web-dev-qa-db-fra.com

Comment réutiliser des modèles Fastai formés?

Comment charger un modèle pré-entraîné à l'aide de l'implémentation fastai sur PyTorch? Comme dans SkLearn, je peux utiliser pickle pour transférer un modèle dans un fichier, puis le charger et l’utiliser plus tard. J'ai utilisé la méthode .load () après avoir déclaré une instance d'apprentissage, comme ci-dessous, pour charger des poids précédemment enregistrés:

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

Ensuite, pour prédire la classe d'une image:

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))

Mais cela me donne l'erreur:

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

Ce code fonctionne si j'utilise learn.fit(0.01, 3) au lieu de learn.load(). Ce que je veux vraiment, c'est éviter l'étape de formation dans mon application. 

5
ni8mr

Cette erreur se produit chaque fois qu'un lot de vos données contient un seul élément.

Solution 1: Appelez learn.predict () après learn.load ('resnet34_test')

Solution 2: Supprimez 1 point de données de votre ensemble d'entraînement.

Issue de Pytorch

Description du problème du forum Fastai

2

Il peut s'agir d'un cas Edge où la taille du lot est égale à 1 pour un lot. Assurez-vous qu'aucun de vos lots = 1 (surtout le dernier lot)

1
Feras