TensorFlowとPythonでデータ拡張(Augmentation)を使って過学習を減らす方法
データ拡張(Data Augmentation)は、訓練データに新たなサンプルを追加することで過学習(オーバーフィッティング)を軽減するための有効な手法です。具体的には、「RandomFlip」レイヤーなどを含むSequentialモデルを作成して実装します。
前提知識:Keras Sequential APIとCNN
本記事では、KerasのSequential APIを使用します。このAPIは、各レイヤーが正確に1つの入力テンソルと1つの出力テンソルを持つ、単純なレイヤーの積み重ねからなるモデルを構築するのに適しています。
少なくとも1つの畳み込み層(Convolutional Layer)を含むニューラルネットワークは「畳み込みニューラルネットワーク(CNN)」と呼ばれ、これを用いて学習モデルを構築できます。
画像分類器はkeras.Sequentialモデルで作成し、データはpreprocessing.image_dataset_from_directoryを使ってディスクから効率的に読み込みます。その後、過学習を検出し、データ拡張やドロップアウトといった手法を適用して対策を行います。
使用するデータセットについて
今回使用するのは約3,700枚の花の画像データセットです。このデータセットには5つのサブディレクトリが含まれており、クラスごとに1つのサブディレクトリが対応しています。クラスは以下の5種類です。
- daisy(デイジー)
- dandelion(タンポポ)
- roses(バラ)
- sunflowers(ひまわり)
- tulips(チューリップ)
コードの実行にはGoogle Colaboratoryを使用します。Google Colabはブラウザ上でPythonコードを実行できる環境で、設定不要かつGPU(グラフィックス処理装置)へ無料でアクセスできます。Jupyter Notebookをベースに構築されています。
過学習とは何か
訓練サンプルの数が少ない場合、モデルは訓練データに含まれるノイズや不要なディテールまで学習してしまいます。これにより、新しいデータに対するモデルのパフォーマンスが低下します。
過学習が起きると、モデルは未知のデータセットに対してうまく汎化できなくなります。過学習を回避する方法はいくつかありますが、本記事ではデータ拡張を用いて対策します。
データ拡張とは、既存のサンプルに対してランダムな変換を加えることで、見た目として自然な画像を生成し、追加の訓練データを作り出す手法です。これにより、モデルはデータのさまざまな側面に触れることができ、汎化性能の向上につながります。
コード例
print("Using data augmentation to eliminate overfitting")
data_augmentation = keras.Sequential(
[
layers.experimental.preprocessing.RandomFlip("horizontal",input_shape=(img_height,
img_width,3)),
layers.experimental.preprocessing.RandomRotation(0.1),
layers.experimental.preprocessing.RandomZoom(0.1),
]
)
コード引用元:https://www.tensorflow.org/tutorials/images/classification
実行結果
Using data augmentation to eliminate overfitting
解説
データ拡張は、tf.keras.layers.experimental.preprocessing のレイヤーを使って実装できます。
これらのレイヤーは他のレイヤーと同様にモデル内に組み込まれ、GPU上で実行されます。
この仕組みにより、過学習を排除または軽減することが可能になります。
-
TensorFlowとPythonで線形モデルをトレーニングする方法を解説
TensorFlowとは TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて各種アルゴリズムやディープラーニングアプリケーションなどを実装できます。研究用途だけでなく、本番環境(プロダクション)でも幅広く利用されています。 TensorFlowのインストール方法 Windows環境では、以下のコマンドを実行するだけで「tensorflow」パッケージをインストールできます。 pip install tensorflow テンソル(Tensor)とは何か テンソルはTensorFlowにおける基本的なデータ
-
Kerasを使ってPythonでモデルをプロットする方法をわかりやすく解説
TensorFlowとはTensorFlowは、Googleが提供している機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究目的から本番環境での運用まで対応しており、複雑な数値計算を高速に実行するための最適化技術が数多く組み込まれています。TensorFlowにおける「テンソル(Tensor)」は、データを扱うための基本的なデータ構造です。テンソルは多次元配列(またはリスト)であり、データフローグラフと呼ばれる計算グラフのノード同士をエッジでつ