DeepLearningの勉強をしていたときに学習中の精度や損失関数を可視化したいと思い、matplotlibを使用してグラフを表示する方法を調べたのでまとめます。
開発環境は以下の通りです。
精度は以下のコードで可視化することができます。
精度を可視化すると以下のようなグラフができあがります。
損失関数の値は以下のコードで可視化することができます。(ほとんど精度の可視化と同じ)
損失関数の値を可視化すると以下のようなグラフができあがります。
subplotの引数は「行の数,列の数,何番目に配置しているか」となっているので、引数次第では縦に2つなども表示が可能です。
以下にサンプルコードを示します。
MNISTを全結合のみ使って学習させたグラフは以下のようになっていました。
過学習を起こしているからか損失関数の値がとんでもないことになってる…。
開発環境
開発環境は以下の通りです。
- Python 3.69
- Keras 2.3.1
- matplotlib 3.2.1
精度と損失関数の値を可視化する
精度は以下のコードで可視化することができます。
plt.plot(history.history['accuracy']) # 訓練データに対しての精度をプロット
plt.plot(history.history['val_accuracy']) # テストデータに対しての精度をプロット
plt.title('Model accuracy') # グラフタイトル
plt.ylabel('Accuracy') # グラフのY軸ラベル
plt.xlabel('Epoch') # グラフのX軸ラベル
plt.legend(['Train', 'Test'], loc='upper left') # 凡例の表示
plt.show() # グラフを表示する
精度を可視化すると以下のようなグラフができあがります。
損失関数の値を可視化する
損失関数の値は以下のコードで可視化することができます。(ほとんど精度の可視化と同じ)
plt.plot(history.history['loss']) # 訓練データの値
plt.plot(history.history['val_loss']) # テストデータの値
plt.title('Model loss') # グラフのタイトル
plt.ylabel('Loss') # グラフのY軸ラベル
plt.xlabel('Epoch') # グラフのX軸ラベル
plt.legend(['Train', 'Test'], loc='upper left') # 凡例の表示
plt.show() # グラフを表示する
損失関数の値を可視化すると以下のようなグラフができあがります。
2つのグラフを横並びで表示する
matplotlibのsubplot関数を使うと2つのグラフを横並びで表示することができます。subplotの引数は「行の数,列の数,何番目に配置しているか」となっているので、引数次第では縦に2つなども表示が可能です。
以下にサンプルコードを示します。
plt.figure(figsize=(10,5)) # グラフのサイズ
# Plot training & validation accuracy values
plt.subplot(1,2,1) # 1つめのグラフ
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
# Plot training & validation loss values
plt.subplot(1,2,2) # 2つめのグラフ
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Test'], loc='upper left')
plt.show() # グラフを表示する
MNISTを全結合のみ使って学習させたグラフは以下のようになっていました。
過学習を起こしているからか損失関数の値がとんでもないことになってる…。