web-dev-qa-db-ja.com

トレーニング済みのfastaiモデルを再利用するにはどうすればよいですか?

PyTorchでfastai実装を使用して事前トレーニング済みモデルをロードするにはどうすればよいですか? SkLearnのように、pickleを使用してモデルをファイルにダンプし、後でロードして使用することができます。以下のようなlearnインスタンスを宣言した後、.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()を使用すると機能します。私が本当に望んでいるのは、アプリケーションのトレーニングステップを回避することです。

7
ni8mr

このエラーは、データのバッチに単一の要素が含まれている場合に発生します。

解決策1:learn.load( 'resnet34_test')の後にlearn.predict()を呼び出します

解決策2:トレーニングセットから1つのデータポイントを削除します。

Pytorchの問題

Fastaiフォーラムの問題の説明

2

これは、バッチサイズが一部のバッチで1に等しいエッジケースである可能性があります。バッチが1でないことを確認してください(ほとんどの場合、最後のバッチ)

2
Feras