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

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

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

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

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

Q&A

解決済

1回答

4113閲覧

Keras historyを可視化できない

wrkig

総合スコア15

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

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

0グッド

0クリップ

投稿2019/07/17 13:15

編集2019/07/17 23:05

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

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

Python

1import numpy as np 2import matplotlib.pyplot as plt 3from keras.datasets import mnist 4from keras.layers import Activation, Dense, Dropout 5from keras.models import Sequential, load_model 6from keras.utils.np_utils import to_categorical 7from keras import optimizers 8from keras import models 9from keras import layers 10 11%matplotlib inline 12 13(X_train, y_train), (X_test, y_test) = mnist.load_data() 14 15X_train = X_train.reshape(X_train.shape[0], 784)[:6000] 16X_test = X_test.reshape(X_test.shape[0], 784)[:1000] 17y_train = to_categorical(y_train)[:6000] 18y_test = to_categorical(y_test)[:1000] 19 20model = Sequential() 21model.add(Dense(256, input_dim=784)) 22model.add(Activation("sigmoid")) 23model.add(Dense(128)) 24model.add(Activation("sigmoid")) 25 26model.add(Dropout(rate=0.5)) 27 28model.add(Dense(10)) 29model.add(Activation("softmax")) 30 31sgd = optimizers.SGD(lr=0.1) 32 33model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"]) 34 35history = model.fit( 36 X_train, 37 y_train, 38 batch_size=32, 39 epochs=5, 40 verbose=1, 41 validation_data=(X_test, y_test), 42) 43 44acc = history.history["acc"] 45val_acc = history.history["val_acc"] 46loss = history.history["loss"] 47val_loss = history.history["val_loss"] 48 49epochs = range(0, len(acc)+1) 50 51plt.plot(epochs, acc, label="acc", ls="-", marker="o") 52plt.plot(epochs, val_acc, label="val_acc", ls="-", marker="x") 53plt.ylabel("accuracy") 54plt.xlabel("epoch") 55plt.legend(loc="best") 56plt.show() 57

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の部分が

Python

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

となっています。

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


追記

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

Python

1import numpy as np 2import matplotlib.pyplot as plt 3from keras.datasets import mnist 4from keras.layers import Activation, Dense, Dropout 5from keras.models import Sequential, load_model 6from keras.utils.np_utils import to_categorical 7from keras import optimizers 8from keras import models 9from keras import layers 10import tensorflow 11import tensorboard 12from livelossplot import PlotLossesKeras 13 14%matplotlib inline 15 16(X_train, y_train), (X_test, y_test) = mnist.load_data() 17 18X_train = X_train.reshape(X_train.shape[0], 784)[:6000] 19X_test = X_test.reshape(X_test.shape[0], 784)[:1000] 20y_train = to_categorical(y_train)[:6000] 21y_test = to_categorical(y_test)[:1000] 22 23model = Sequential() 24model.add(Dense(256, input_dim=784)) 25model.add(Activation("sigmoid")) 26model.add(Dense(128)) 27model.add(Activation("sigmoid")) 28 29model.add(Dropout(rate=0.5)) 30 31model.add(Dense(10)) 32model.add(Activation("softmax")) 33 34sgd = optimizers.SGD(lr=0.1) 35 36model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"]) 37 38# callbacks = [PlotLossesKeras()] 39 40history = model.fit( 41 X_train, 42 y_train, 43 batch_size=32, 44 epochs=5, 45 verbose=1, 46 validation_data=(X_test, y_test), 47# callbacks=[PlotLossesKeras()] 48) 49 50acc = history.history["acc"] 51val_acc = history.history["val_acc"] 52loss = history.history["loss"] 53val_loss = history.history["val_loss"] 54 55epochs = range(1, len(acc) + 1) 56 57 58print("-" * 20) 59print(epochs) 60print(history) 61print("-" * 20) 62 63 64plt.plot([1, 5], [1, 10]) # 追記 65plt.plot(epochs, acc, label="acc", ls="-", marker="o") 66plt.plot(epochs, val_acc, label="val_acc", ls="-", marker="x") 67plt.ylabel("accuracy") 68plt.xlabel("epoch") 69plt.legend(loc="best")

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

Python

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

の部分は

Python

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

または

Python

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

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

Python

1%matplotlib inline

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

Python

1plt.show()

は不要ですね。


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

Python

1import numpy as np 2import matplotlib.pyplot as plt 3from keras.datasets import mnist 4from keras.layers import Activation, Dense, Dropout 5from keras.models import Sequential, load_model 6from keras.utils.np_utils import to_categorical 7from keras import optimizers 8from keras import models 9from keras import layers 10 11%matplotlib inline 12 13(X_train, y_train), (X_test, y_test) = mnist.load_data() 14X_train = X_train.reshape(X_train.shape[0], 784)[:6000] 15X_test = X_test.reshape(X_test.shape[0], 784)[:1000] 16y_train = to_categorical(y_train)[:6000] 17y_test = to_categorical(y_test)[:1000] 18 19model = Sequential() 20model.add(Dense(256, input_dim=784)) 21model.add(Activation("sigmoid")) 22model.add(Dense(128)) 23model.add(Activation("sigmoid")) 24model.add(Dropout(rate=0.5)) 25model.add(Dense(10)) 26model.add(Activation("softmax")) 27sgd = optimizers.SGD(lr=0.1) 28model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"]) 29model.summary() 30history = model.fit( 31 X_train, 32 y_train, 33 batch_size=32, 34 epochs=5, 35 verbose=1, 36 validation_data=(X_test, y_test), 37) 38 39acc = history.history["acc"] 40val_acc = history.history["val_acc"] 41loss = history.history["loss"] 42val_loss = history.history["val_loss"] 43epochs = range(1, len(acc)+1) 44 45plt.plot(epochs, acc, label="acc", ls="-", marker="o") 46plt.plot(epochs, val_acc, label="val_acc", ls="-", marker="x") 47plt.ylabel("accuracy") 48plt.xlabel("epoch") 49plt.legend(loc="best")

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

です。

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

Python

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

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

投稿2019/07/17 15:05

編集2019/07/17 23:25
magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wrkig

2019/07/17 15:17

回答ありがとうございます! 修正してみましたが、出力は変わらずで、グラフは表示されませんでした。。。 plt.show()は不要なんですね!
magichan

2019/07/17 23:26

んーなんでだろ?? とりあえず、私の環境にて動作したコードをそのまま転記しましたので、ご確認ください。
wrkig

2019/07/17 23:32

最小限のコードを実行したところ正常にグラフが出力されました。 載せていただいたコードも実行したのですが、グラフは出力されませんでした。
magichan

2019/07/17 23:38

であれば、結果がどうなっているかですね。 新しいセルに acc だけ記述して実行した結果(accの中身)はどうなってますか?
wrkig

2019/07/17 23:47

新しいセルでaccを実行してみたところ、NameError: name 'acc' is not definde となってしまっていました。
magichan

2019/07/17 23:54

あれ? コードに acc = history.history["acc"] があるので、acc には何らかの値が入っているはずなのですが・・ 今一度、上記のkerasのコードが入ったセルを実行した後に、acc だけのセルを実行してみてください。(下記忘れてましたが、kerasのコードと同じノート上のセルでお願いします)
magichan

2019/07/17 23:56

kerasにて問題なく学習が進んでいるのであれば、acc の結果は何らかの1次配列となっている筈です。 であれば更に新しいセルで plt.plot(acc) を実行すると何らかのグラフが描画されると思うのすが。
wrkig

2019/07/18 00:02

載せていただいたコードのplt.plotの前に、print(acc)やprint("Hello")を書いてみたのですが、これも出力されませんでした。。。
magichan

2019/07/18 00:08 編集

一度整理しましょうか。 history = model.fit(...) までを実行すると出力に質問で書かれている Epoch 1/5 6000/6000 [==============================] - 2s 406us/step - loss: 1.7341 - acc: 0.412 のようなログが表示されるのですが、これは表示されてますか? 表示されているのであれば、その次の行に print(history.history) を入れてhistory情報が格納されているかを確認してください。
wrkig

2019/07/18 00:11

新しいセルで plt.plot(acc) を実行してみたのですが、 NameError: name 'plt' is not defined になってしまいます。 accも相変わらず not defined です・・・ 昨日、質問文記載のコードに print(acc) や print("Hello") を書いて何回も実行していた中で、一度だけ acc の配列と Hello が表示されたことがありました。 このときもグラフは出力されずで、新しいセルで plt.plot(epochs, acc) を実行したのですが、このときも name 'plt' is not defined となってしまっていました。
wrkig

2019/07/18 00:13

print(history.history)も name 'history' is not defined でした。 学習ログは表示されていました。
magichan

2019/07/18 00:16

history = model.fit(...) を実行した後なのですから、history が定義されていない事はないかと思います。 また、質問のコードの2行目で import matplotlib.pyplot as plt を実行していますので、plt が定義されていない事もありません。
wrkig

2019/07/18 00:18

さらに追記失礼します。 いま、記載していただいたコードに print(acc) と print(val_acc) を書いて実行したところ、 [0.4151666666666667, 0.6521666666666667, 0.7196666666666667, 0.754, 0.7613333333333333] [0.7, 0.764, 0.786, 0.798, 0.826] が出力されました。 plt.plot(acc) を新しいセルで実行したところ、右上のkernelが動き続けていて出力される気配がありません。。。
wrkig

2019/07/18 00:27

昨日からいろいろと試しているのですが、model.fit(...) は正常に動いていて、history に格納されず、model.fit(...)以下のコードが実行されていないような挙動をしています。 もう一回コードを実行したところ、またprint文が出力されなくなってしまいました...
magichan

2019/07/18 01:56

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

2019/07/18 02:16

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

2019/07/18 16:12

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問