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

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

ただいまの
回答率

91.02%

  • Python 3.x

    4078questions

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

  • Chainer

    94questions

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

chainerで学習結果の保存・読み込みを行いたいが、object has no attribute エラーが出てしまう

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 630

Python3、Chainerでニューラルネットワークの勉強をしています。
適当なサンプルコードを書いて、学習結果の保存・読み込みを行おうと思っています。
学習自体は目的ではなく、あくまで保存・読み込みの勉強が目的です。

# モデルの読み込み(存在する場合)
modelFileName = "kakezan-model.npz"
if os.path.exists(modelFileName):
    model = MyChain()
    serializers.load_npz(modelFileName, model)
else:
    model = MyChain()

# optimizerの読み込み(存在する場合)
optimizerFileName = "kakezan-optimizer.npz"
if os.path.exists(optimizerFileName):
    optimizer = optimizers.SMORMS3()
    serializers.load_npz(optimizerFileName, optimizer)
else:
    optimizer = optimizers.SMORMS3()
    optimizer.setup(model)

上のようなコードで、optimizerを読み取ろうとしたのですが、以下のエラーが出て読み込めません。

Traceback (most recent call last):
  File "prac.py", line 56, in <module>
    serializers.load_npz(optimizerFileName, optimizer)
  File "/usr/local/lib/python3.5/dist-packages/chainer/serializers/npz.py", line 134, in load_npz
    d.load(obj)
  File "/usr/local/lib/python3.5/dist-packages/chainer/serializer.py", line 82, in load
    obj.serialize(self)
  File "/usr/local/lib/python3.5/dist-packages/chainer/optimizer.py", line 445, in serialize
    self.t = serializer('t', self.t)
AttributeError: 'SMORMS3' object has no attribute 't'

どのようにしたら読み込めますでしょうか?

教えてください。

以下、コードの全文です。

from chainer import Chain
from chainer import cuda, Function, gradient_check, Variable, optimizers, serializers, utils
import chainer.links as L
import chainer.functions as F
import numpy as np
import os



class MyChain(Chain):
    def __init__(self):
        super(MyChain, self).__init__(
            l1 = L.Linear(2, 10),
            l2 = L.Linear(10, 10),
            l3 = L.Linear(10, 1))

    def __call__(self, x, y):
        xv = Variable(x)
        yv = Variable(y)
        pr = self.predict(xv)
        return F.mean_squared_error(pr, yv)

    def predict(self, x):
        h1 = self.l1(x)
        h2 = self.l2(h1)
        h3 = self.l3(h2)
        return h3

def createData(max, N):
    # 適当にデータを作って掛け算を学習してみる。
    xs1 = np.linspace(-max, max, N).astype(np.float32)
    xs2 = np.random.normal(0, max, N).astype(np.float32)
    return np.c_[xs1, xs2], np.c_[xs1*xs2]


rangeMax = 13.5

N = 1200
batchSize = 10
xtrain, ytrain = createData(rangeMax, N)
xtest,  ytest  = createData(rangeMax, 1000)


# モデルの読み込み(存在する場合)
modelFileName = "kakezan-model.npz"
if os.path.exists(modelFileName):
    model = MyChain()
    serializers.load_npz(modelFileName, model)
else:
    model = MyChain()

# optimizerの読み込み(存在する場合)
optimizerFileName = "kakezan-optimizer.npz"
if os.path.exists(optimizerFileName):
    optimizer = optimizers.SMORMS3()
    serializers.load_npz(optimizerFileName, optimizer)
else:
    optimizer = optimizers.SMORMS3()
    optimizer.setup(model)

for epoch in range(120):
    perm = np.random.permutation(N)

    for i in range(0, N, batchSize):
        # ランダムにbatchSize個のデータを取得
        x_batch = xtrain[perm[i:i + batchSize]]
        y_batch = ytrain[perm[i:i + batchSize]]

        model.zerograds()
        loss = model(x_batch, y_batch)
        loss.backward()
        optimizer.update()

    if 0 < epoch and epoch % 30 == 0:
        loss = model(xtest, ytest)
        print(loss.data)
        serializers.save_npz(modelFileName, model)
        serializers.save_npz(optimizerFileName, optimizer)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

https://github.com/chainer/chainer/blob/master/chainer/optimizer.py#L342

Optimizerにattribute 't'が作成されるのはsetupメソッドの中なのですよね。

なので、デシリアライズの前にsetupしておかないといけないのではと思いました。


また、

http://docs.chainer.org/en/stable/reference/core/generated/chainer.Optimizer.html#chainer.Optimizer.serialize

It does not saves nor loads the parameters of the target link. They should be separately saved or loaded.

とも書いてあります。今のソースだと、Optimizerはモデルに結びついてないですよね。


なので、

# optimizerの読み込み(存在する場合)
optimizerFileName = "kakezan-optimizer.npz"
optimizer = optimizers.SMORMS3()
optimizer.setup(model)
if os.path.exists(optimizerFileName):
    serializers.load_npz(optimizerFileName, optimizer)

ではないでしょうか。試していませんが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/16 12:40

    ありがとうございます。これでOKでした

    キャンセル

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

  • ただいまの回答率 91.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Tensorflowのfully_connected_feedの実行にエラーが続く

    tensoflowのfully_connected_feed.pyを実行しようとしているのですが、どう試行錯誤してもエラーが続きます。 tensorflowのインストールの仕方、

  • 解決済

    chainerのImportError: No module

    前提・実現したいこと https://github.com/mitmul/deeppose こちらのdeep poseを実装中のエラーです サーバー上に全てのデータを置き、チュ

  • 解決済

    list index out of range のエラー修正

    コード import numpy as np import chainer from chainer import cuda,Function,report,training,ut

  • 解決済

    ニューラルネットワークを使い「掛け算」の学習をしたい

    chainerを使って、ニューラルネットワークの勉強をしています。 先日はモデル・オプティマイザーの保存についてご教示いただきありがとうございました。 引き続き、色々調査してい

  • 解決済

    chainerによるCNN構築時のエラーに対処できません。

    現在、CNNを用いて画像の2値分類を実行しようとしています。 画像は縦5横20チャンネル数3で、それぞれに0か1が割り当てられています。 またそれぞれの画像は1枚ずつあります(訓練

  • 解決済

    chainerでのin_types[0].shape[1] == in_types[1].shape...

    前提・実現したいこと chainerで作成したモデルを読み込みたいのですが、 Expect: in_types[0].shape[1] == in_types[1].shape[1

  • 解決済

    Pythonの文法について

    x = x[None, ...] この処理は一体どのようなものなのでしょうか? Chainerの勉強において、推論を行うために入力をミニバッチの形にするとあったのですが、Pyth

  • 受付中

    AttributeErrorについて質問です。

     前提・実現したいこと ディープラーニングについて勉強したいと思い公開されていたプログラム(MNISTデータの正解数と正解率を出すプログラム)を実際に動かそうとしてみたら以下のエラ

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

  • Python 3.x

    4078questions

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

  • Chainer

    94questions

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