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

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

ただいまの
回答率

88.92%

keras モデルのロードについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,151

---stax---

score 142

かなり初歩的な質問で申し訳ありません。
使用しているフレームワークはkerasでJupyter Notebookを用いて実行しています。

kerasを使って以下のように学習させたモデルをmodel.save()を使って保存しました

history = model.fit_generator(train_generator,
                             steps_per_epoch = 5,
                             epochs = 30,
                             validation_data = validation_generator,
                             validation_steps = 5)

model.save(r'C:\Users\python file\model\test.h5')


カーネルをリスタートした際など再度学習させるのは時間がかかるのでload_model()を使ってモデルを読み出して各エポックの結果などをプロットさせるために以下のように記述するとエラーとなります

from keras.models import load_model
import matplotlib.pyplot as plt

history = load_model(r'C:\Users\python file\model\test.h5')

acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(1, len(acc) + 1)

#正解率をプロット
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and Validation accuracy')

plt.figure()

#損失値をプロット
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and Validation loss')
plt.legend()

plt.show()
AttributeError                            Traceback (most recent call last)
<ipython-input-13-dc5ee5b8cda1> in <module>()
      2 from keras.models import load_model
      3 
----> 4 acc = history.history['acc']
      5 val_acc = history.history['val_acc']
      6 loss = history.history['loss']

AttributeError: 'Sequential' object has no attribute 'history'

自分なりにエラー内容などを調べてみたのですが何が原因か分からず悩んでいます。
load_modelの使い方や認識が誤っているでしょうか?
以下のように記述するとSequential objectとしては認識していると思うのですがどこに問題がありますでしょうか?
初歩的な質問で申し訳ありませんがアドバイス宜しくお願い致します。

print(history)

<keras.engine.sequential.Sequential object at 0x0000000005723F60>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

公式ドキュメントに,model.save()によって保存されるのは

  • 再構築可能なモデルの構造
  • モデルの重み
  • 学習時の設定 (loss,optimizer)
  • optimizerの状態

と記述されておりますので、学習過程のHistoryオブジェクトは保存されないかと思います。

ですので、

  • 学習後にmodel.fit_generator() の戻り値の Histroyオブジェクトを pickleなどを使って保存する
  • 学習時に callbacksに keras.callbacks.CSVLogger を設定して、ログを記録する

あたりで対応するとよいのではないでしょうか

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/03/05 16:53

    回答ありがとうございます。
    historyオブジェクトは保存されていないのですね。
    自分でもドキュメントを読むようにしているのですが全然理解できていませんでした・・・
    アドバイス頂いたような手法で対応してみます。
    ありがとうございます。

    キャンセル

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

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

関連した質問

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