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

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

ただいまの
回答率

89.51%

Keras historyを可視化できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,757

wrkig

score 9

Kerasでhistoryをグラフに出力したいのですが、学習の数値だけでグラフが出ません。

環境は macOS version:10.14.5、python3.7でjupyter labを使っています。

import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.layers import Activation, Dense, Dropout
from keras.models import Sequential, load_model
from keras.utils.np_utils import to_categorical
from keras import optimizers
from keras import models
from keras import layers

%matplotlib inline

(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape(X_train.shape[0], 784)[:6000]
X_test = X_test.reshape(X_test.shape[0], 784)[:1000]
y_train = to_categorical(y_train)[:6000]
y_test = to_categorical(y_test)[:1000]

model = Sequential()
model.add(Dense(256, input_dim=784))
model.add(Activation("sigmoid"))
model.add(Dense(128))
model.add(Activation("sigmoid"))

model.add(Dropout(rate=0.5))

model.add(Dense(10))
model.add(Activation("softmax"))

sgd = optimizers.SGD(lr=0.1)

model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"])

history = model.fit(
    X_train,
    y_train,
    batch_size=32,
    epochs=5,
    verbose=1,
    validation_data=(X_test, y_test),
)

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

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

plt.plot(epochs, acc, label="acc", ls="-", marker="o")
plt.plot(epochs, val_acc, label="val_acc", ls="-", marker="x")
plt.ylabel("accuracy")
plt.xlabel("epoch")
plt.legend(loc="best")
plt.show()

OUT

WARNING:tensorflow:From /Users/tk/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
WARNING:tensorflow:From /Users/tk/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.
Instructions for updating:
Please use rate instead of keep_prob. Rate should be set to rate = 1 - keep_prob.
WARNING:tensorflow:From /Users/tk/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.cast instead.
Train on 6000 samples, validate on 1000 samples
Epoch 1/5
6000/6000 [==============================] - 2s 406us/step - loss: 1.7341 - acc: 0.4120 - val_loss: 1.1612 - val_acc: 0.6760
Epoch 2/5
6000/6000 [==============================] - 2s 261us/step - loss: 1.0437 - acc: 0.6675 - val_loss: 0.8453 - val_acc: 0.7640
Epoch 3/5
6000/6000 [==============================] - 1s 238us/step - loss: 0.8622 - acc: 0.7213 - val_loss: 0.7237 - val_acc: 0.7970
Epoch 4/5
6000/6000 [==============================] - 2s 282us/step - loss: 0.7922 - acc: 0.7522 - val_loss: 0.6881 - val_acc: 0.8060
Epoch 5/5
6000/6000 [==============================] - 2s 256us/step - loss: 0.7314 - acc: 0.7722 - val_loss: 0.6314 - val_acc: 0.8150


「Pythonで学ぶ!深層学習の教科書」という本で勉強しているのですが、この本のソースコード通りに書いても同じ結果になってしまいます。
本では、plt.plotの部分が

plt.plot(history.history["acc"], label="acc", ls="-", marker="o")


となっています。

何かわかることがございましたら、ご教示いただければ幸いです。


追記

plt.plot([1, 5], [1, 10])を書いてみたのですが、グラフが表示されませんでした。
pythonやkerasのバージョンが原因で表示されないことはあるのでしょうか?

import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.layers import Activation, Dense, Dropout
from keras.models import Sequential, load_model
from keras.utils.np_utils import to_categorical
from keras import optimizers
from keras import models
from keras import layers
import tensorflow
import tensorboard
from livelossplot import PlotLossesKeras

%matplotlib inline

(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape(X_train.shape[0], 784)[:6000]
X_test = X_test.reshape(X_test.shape[0], 784)[:1000]
y_train = to_categorical(y_train)[:6000]
y_test = to_categorical(y_test)[:1000]

model = Sequential()
model.add(Dense(256, input_dim=784))
model.add(Activation("sigmoid"))
model.add(Dense(128))
model.add(Activation("sigmoid"))

model.add(Dropout(rate=0.5))

model.add(Dense(10))
model.add(Activation("softmax"))

sgd = optimizers.SGD(lr=0.1)

model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"])

# callbacks = [PlotLossesKeras()]

history = model.fit(
    X_train,
    y_train,
    batch_size=32,
    epochs=5,
    verbose=1,
    validation_data=(X_test, y_test),
#     callbacks=[PlotLossesKeras()]
)

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)


print("-" * 20)
print(epochs)
print(history)
print("-" * 20)


plt.plot([1, 5], [1, 10])  # 追記
plt.plot(epochs, acc, label="acc", ls="-", marker="o")
plt.plot(epochs, val_acc, label="val_acc", ls="-", marker="x")
plt.ylabel("accuracy")
plt.xlabel("epoch")
plt.legend(loc="best")
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

epochsのデータ数が合ってませんね。

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


の部分は

epochs = range(0, len(acc))


または

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


の間違いではないでしょうか。
あと、

%matplotlib inline


を記述しているのであれば

plt.show()


は不要ですね。


【追記】
実際に実行したコード

import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.layers import Activation, Dense, Dropout
from keras.models import Sequential, load_model
from keras.utils.np_utils import to_categorical
from keras import optimizers
from keras import models
from keras import layers

%matplotlib inline

(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 784)[:6000]
X_test = X_test.reshape(X_test.shape[0], 784)[:1000]
y_train = to_categorical(y_train)[:6000]
y_test = to_categorical(y_test)[:1000]

model = Sequential()
model.add(Dense(256, input_dim=784))
model.add(Activation("sigmoid"))
model.add(Dense(128))
model.add(Activation("sigmoid"))
model.add(Dropout(rate=0.5))
model.add(Dense(10))
model.add(Activation("softmax"))
sgd = optimizers.SGD(lr=0.1)
model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"])
model.summary()
history = model.fit(
    X_train,
    y_train,
    batch_size=32,
    epochs=5,
    verbose=1,
    validation_data=(X_test, y_test),
)

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, label="acc", ls="-", marker="o")
plt.plot(epochs, val_acc, label="val_acc", ls="-", marker="x")
plt.ylabel("accuracy")
plt.xlabel("epoch")
plt.legend(loc="best")


実行した結果(途中経過は省略しております)
イメージ説明

です。

もしこれで表示できないのであれば、matplotlib のインストール等に失敗している可能性があります。
試しに最小限のコード

%matplotlib inline
import matplotlib.pyplot as plt
plt.plot([0,1],[0,1])


にてグラフが描画できるか確認してみてください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/07/18 10:56

    症状的には model.fit() の実行後に終了していないような感じですね。であれば TensorFlow / Keras 環境が怪しいかもしれませんね。

    キャンセル

  • 2019/07/18 11:16

    まずは Google colaboratory などの フリーの Jupyter実行環境を使って上記のコードの正常系の動作を確認してみるのも良いかもしれません。

    キャンセル

  • 2019/07/19 01:12

    Google colaboratory で実行してみたところ、グラフも含めて正常に出力されたので、私の環境に問題があるようです。ご指摘の通りTensorFlow / Keras の環境を見直してみようと思います。

    貴重なお時間を割いていただいて本当にありがとうございます!

    キャンセル

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

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