TensorFlowで花のデータセットを標準化する方法:Rescalingレイヤーの活用ガイド
データの標準化とは
データの標準化(standardization)とは、データセット全体のスケールを揃え、すべての特徴量が同等の単位で表現できるようにする処理のことです。ニューラルネットワークでは、入力データの値域が大きすぎると学習が不安定になるため、この前処理は非常に重要です。
Kerasモジュールに用意されている「Rescaling」メソッドを使うことで、リスケーリング用のレイヤーを簡単に構築できます。作成したレイヤーは、データセットに対して「map」メソッドを呼び出すことで、全データに一括して適用できます。
関連記事:
TensorFlowとは何か?KerasとTensorFlowを組み合わせてニューラルネットワークを作る方法
使用するデータセットについて
本記事では、数千枚の花の画像を含む「flowers(花)データセット」を使用します。このデータセットは5つのサブディレクトリで構成されており、各サブディレクトリが1つのクラス(花の種類)に対応しています。
以下のコードは、Google Colaboratory(Google Colab)上で実行することを想定しています。Google Colabはブラウザ上でPythonコードを実行できる環境であり、面倒な設定は一切不要で、GPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。
コード例
from tensorflow.keras import layers
print("Rescalingレイヤーを使ってデータを標準化します")
normalization_layer = tf.keras.layers.experimental.preprocessing.Rescaling(1./255)
print("map関数を呼び出すことで、このレイヤーをデータセットに適用できます")
normalized_ds = train_ds.map(lambda x, y: (normalization_layer(x), y))
image_batch, labels_batch = next(iter(normalized_ds))
first_image = image_batch[0]
print(np.min(first_image), np.max(first_image))コード引用元:https://www.tensorflow.org/tutorials/load_data/images
実行結果
Standardizing the data using a rescaling layer This layer can be applied by calling the map function on the dataset 0.0 0.96902645
解説
- RGBチャンネルの各値は、0から255の範囲に収まっています。
- しかし、このままの大きな値はニューラルネットワークにとって好ましくありません。
- そこで、入力データをできるだけ小さな値に変換することが推奨されます。
- 画像内の値を0から1の範囲に標準化することで、モデルの学習が安定しやすくなります。
- この処理は、Rescalingレイヤーを使うことで簡単に実現できます。上記のコードでは「1./255」を指定しているため、各ピクセル値が255で除算され、結果として最小値0.0、最大値約0.97という範囲に正規化されていることが確認できます。
- 別のアプローチとして、このRescalingレイヤーをモデル定義の中に組み込むことも可能です。その場合、デプロイ時の前処理がシンプルになり、本番環境での運用が容易になります。
-
TensorFlowで花のデータセットを使ってモデルの学習を続ける方法
花のデータセットでモデルの学習を継続するには、Kerasのfitメソッドを使用します。このメソッドには、エポック数(データ全体を何回繰り返してモデルを構築するかの回数)も指定します。学習の過程では、サンプル画像がコンソール上に表示されることもあります。使用するデータセットについて本記事では、数千枚の花の画像を含む「flowers(花)」データセットを使用します。このデータセットは5つのサブディレクトリで構成されており、各クラス(花の種類)ごとに1つのサブディレクトリが割り当てられています。以下のコードはGoogle Colaboratory(Google Colab)上で実行しています。Goo
-
TensorFlowとPythonを使って花のデータセットを可視化する方法
花のデータセットは、matplotlibライブラリを使用することで簡単に可視化できます。imshowメソッドを使うと、画像をコンソール上に表示でき、データセット全体を反復処理しながら最初の数枚の画像だけを出力するといったことも可能です。使用するデータセットについて本記事では、数千枚の花の画像を含む「flowers(花)」データセットを使用します。このデータセットには5つのサブディレクトリが含まれており、各クラス(花の種類)ごとに1つのサブディレクトリが割り当てられています。なお、以下のコードはGoogle Colaboratoryで実行することを想定しています。Google Colab(Col