Python
 Computer >> コンピューター >  >> プログラミング >> Python

TensorFlowとPythonを使ってトレーニング結果を可視化する方法

TensorFlowで学習したモデルのトレーニング結果は、Pythonの「matplotlib」ライブラリを使うことで簡単に可視化できます。「plot」メソッドを利用して、エポックごとの精度(Accuracy)や損失(Loss)の推移をグラフとして描画します。

本記事では、KerasのSequential APIを使用します。Sequential APIは、各レイヤーがちょうど1つの入力テンソルと1つの出力テンソルを持つ、単純な層のスタックからなるシーケンシャルモデルを構築するのに便利なAPIです。

少なくとも1つの畳み込み層(Convolutional Layer)を含むニューラルネットワークは畳み込みニューラルネットワーク(CNN)と呼ばれ、このCNNを活用することで学習モデルを構築できます。

ここでは、keras.Sequentialモデルを使って画像分類器を作成し、preprocessing.image_dataset_from_directoryを使ってディスクからデータを効率的に読み込みます。また、過学習(Overfitting)を検出し、データ拡張(Data Augmentation)やドロップアウト(Dropout)といった手法でその影響を軽減する方法についても触れます。

使用するデータセットには約3,700枚の花の画像が含まれており、5つのサブディレクトリ(クラスごとに1つずつ)に分かれています。クラスは「daisy(デイジー)」「dandelion(タンポポ)」「roses(バラ)」「sunflowers(ひまわり)」「tulips(チューリップ)」の5種類です。

以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上でPythonコードを実行できるサービスで、事前設定が不要であり、GPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。

コード例

print("Calculating the accuracy")
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
print("Calculating the loss")
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs_range = range(epochs)
print("The results are being visualized")
plt.figure(figsize=(8, 8))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.subplot(1, 2, 2)

plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()

コード出典:https://www.tensorflow.org/tutorials/images/classification

実行結果

Calculating the accuracy
Calculating the loss
The results are being visualized

TensorFlowとPythonを使ってトレーニング結果を可視化する方法

解説

  • 上記のグラフを見ると、トレーニング精度と検証精度が同期していないことがわかります。

  • モデルは検証データセットに対して約60%の精度しか達成できていません。

  • この現象は「過学習(Overfitting)」と呼ばれます。

  • トレーニング精度は時間とともに直線的に向上していますが、検証精度は学習過程でおよそ60%付近で頭打ちになっています。

  • トレーニングデータの数が少ない場合、モデルはノイズや不要な詳細まで学習してしまいます。

  • これにより、新しいデータに対するモデルのパフォーマンスが低下します。

  • 過学習が起きていると、モデルは新しいデータセットに対してうまく汎化できなくなります。

  • 過学習を防ぐ方法は多数ありますが、ここではデータ拡張を活用して過学習を克服するアプローチを採用します。

  1. TensorFlowとPythonでFashion MNISTデータを前処理する方法

    TensorFlowはGoogleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションの実装など、幅広い用途に活用できます。研究開発から本番環境まで、多くの場面で採用されている実績あるフレームワークです。Windows環境では、以下のコマンドで「tensorflow」パッケージをインストールできます。pip install tensorflowテンソル(Tensor)はTensorFlowで使用される基本的なデータ構造であり、フロー図におけるエッジ(辺)をつなぐ役割を果たします。このフロー図は「デー

  2. PythonとTensorFlowで2つの行列を乗算する方法を解説

    TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせてアルゴリズムやディープラーニングアプリケーションなどを実装するために利用されています。研究用途から本番運用まで幅広く使われており、複雑な数学的演算を高速に処理できる最適化技術を備えているのが特長です。 その理由の一つは、NumPyと多次元配列を基盤としている点にあります。この多次元配列は「テンソル」と呼ばれます。TensorFlowは深層ニューラルネットワークの構築をサポートし、高いスケーラビリティを持ち、人気のデータセットが多数付属しています。また、GPUに