DeepLearningの勉強をしていたときに学習中の精度や損失関数を可視化したいと思い、matplotlibを使用してグラフを表示する方法を調べたのでまとめます。




開発環境


開発環境は以下の通りです。
  • 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() # グラフを表示する


精度を可視化すると以下のようなグラフができあがります。

Figure_1



損失関数の値を可視化する


損失関数の値は以下のコードで可視化することができます。(ほとんど精度の可視化と同じ)


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() # グラフを表示する


損失関数の値を可視化すると以下のようなグラフができあがります。

Figure_2



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を全結合のみ使って学習させたグラフは以下のようになっていました。

Affine

過学習を起こしているからか損失関数の値がとんでもないことになってる…。