質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

chainerでfine tuningした際にsnapshotが読み込めない

hukuda222
hukuda222

総合スコア13

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

0クリップ

5755閲覧

投稿2018/05/06 11:15

編集2018/05/06 15:08

python

class VGG(Chain): def __init__(self): super(VGG, self).__init__() with self.init_scope(): self.base = L.VGG16Layers() self.classify = L.Linear(None, 20) def __call__(self, x): h = self.base(x, layers=['fc7'])['fc7'] return self.classify(h)

上記のようなネットワークで学習させると、学習自体はうまくいくのですが、trainerのsnapshotを読み込む際に、下記のようなエラーがでます。見た所、snapshotのデータにあるべきデータが存在しないようです。

File "train.py", line 100, in main serializers.load_npz(args.resume, trainer) File "/.local/lib/python3.6/site-packages/chainer/serializers/npz.py", line 179, in load_npz d.load(obj) File "/home/.local/lib/python3.6/site-packages/chainer/serializer.py", line 83, in load obj.serialize(self) File "/.local/lib/python3.6/site-packages/chainer/training/trainer.py", line 332, in serialize self.updater.serialize(serializer['updater']) File "/.local/lib/python3.6/site-packages/chainer/training/updaters/standard_updater.py", line 172, in serialize optimizer.serialize(serializer['optimizer:' + name]) File "/.local/lib/python3.6/site-packages/chainer/optimizer.py", line 549, in serialize rule.serialize(serializer[name]) File "/.local/lib/python3.6/site-packages/chainer/optimizer.py", line 295, in serialize self._state[key] = serializer(key, None) File "/.local/lib/python3.6/site-packages/chainer/serializers/npz.py", line 142, in __call__ dataset = self.npz[key] File "/.local/lib/python3.6/site-packages/numpy/lib/npyio.py", line 239, in __getitem__ raise KeyError("%s is not a file in the archive" % key) KeyError: 'updater/optimizer:main/predictor/base/conv2_2/b/m is not a file in the archive'

chainerのバージョンは4.0.0
pythonのバージョンは3.6.5
です。

このエラーの対策をご存知の方がいらっしゃれば、ご教授お願いします。

エラーが再現できたコード

以下のコードで同様のエラーが発生しました。

python

import numpy as np import chainer.links as L import chainer.functions as F from chainer import dataset, Chain, training, optimizers, \ iterators, reporter, cuda,serializers import argparse if cuda.available: xp = cuda.cupy else: xp = np class VGG(Chain): def __init__(self): super(VGG, self).__init__() with self.init_scope(): self.base = L.VGG16Layers() self.classify = L.Linear(None, 20) def __call__(self, x): h = self.base(x, layers=['fc7'])['fc7'] return self.classify(h) class DataSet(dataset.DatasetMixin): def __init__(self): pass def __len__(self): return 1 def get_example(self, _): return xp.ones((3, 224, 224)).astype('float32'), xp.zeros((1,)).astype('int32')[0] def main(): parser = argparse.ArgumentParser() parser.add_argument('--epoch', '-e', type=int, default=2, help='Number of examples in epoch') parser.add_argument('--batchsize', '-b', type=int, default=1, help='Number of examples in each mini-batch') parser.add_argument('--gpu', '-g', type=int, default=-1, help='GPU ID (negative value indicates CPU)') parser.add_argument('--out', '-o', default='result2', help='Directory to output the result') parser.add_argument('--resume', '-r', default='', help='Resume the training from snapshot') args = parser.parse_args() train_dataset = DataSet() model = L.Classifier(VGG()) if args.gpu >= 0: cuda.get_device_from_id(args.gpu).use() model.to_gpu() optimizer = optimizers.Adam() optimizer.setup(model) model.predictor.base.disable_update() train_iter = iterators.SerialIterator( train_dataset, batch_size=args.batchsize) updater = training.StandardUpdater(train_iter, optimizer) trainer = training.Trainer( updater, (args.epoch, 'epoch'), out=args.out) trainer.extend(training.extensions.LogReport( trigger=(1, 'epoch'))) trainer.extend(training.extensions.PrintReport( entries=['iteration', 'main/loss', 'main/accuracy', 'elapsed_time']), trigger=(1, 'epoch')) # ここでsnapshotを取っています。 trainer.extend(training.extensions.snapshot(), trigger=(1, 'epoch')) if args.resume:      # ここで読み込んでいます serializers.load_npz(args.resume, trainer) trainer.run() if __name__ == "__main__": main()

以下のように実行すると上記のエラーが生じました。

python test.py --gpu 0 python test.py --gpu 0 --resume ./result2/snapshot_iter_1

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

mkgrei

2018/05/06 12:45 編集

コードが正しく書かれているのであれば、特にエラーが出ることなく実行されるのが普通です。という当たり前のことを申し上げておきます。モデルの保存・読込に該当する部分を記述してください。
hukuda222

2018/05/06 12:52

追記しました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Chainer

Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。