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

TensorFlowとPythonでデータを標準化する方法を解説

機械学習モデルの精度を高めるためには、入力データの前処理、特に標準化が重要な役割を果たします。本記事では、TensorFlowを使ってPythonでデータを標準化する手順を、花の画像データセットを例にわかりやすく解説します。

使用するデータセットについて

ここでは、数千枚の花の画像を含む「flowersデータセット」を使用します。このデータセットには5つのサブディレクトリが含まれており、各サブディレクトリが1つのクラス(花の種類)に対応しています。TensorFlowのget_fileメソッドでデータセットをダウンロードした後、環境にロードして作業を進めます。

Google Colaboratoryでの実行環境

本記事のコードは、Google Colaboratory(Google Colab)で実行することを想定しています。Google Colabはブラウザ上でPythonコードを実行できるサービスで、事前の設定が一切不要であり、GPU(グラフィックス処理装置)にも無料でアクセスできます。Jupyter Notebookをベースに構築されているため、ノートブック形式で直感的に開発を進められるのが特徴です。

Rescalingレイヤーによるデータの標準化

画像データを標準化するには、モデルに正規化レイヤーを導入する方法が有効です。具体的には、「Rescaling」レイヤーを使用し、mapメソッドを通じてデータセット全体に適用します。

以下にサンプルコードを示します。

print("Normalization layer is created ")
normalization_layer = layers.experimental.preprocessing.Rescaling(1./255)
print("This layer is applied to dataset using map function ")
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/images/classification

実行結果

Normalization layer is created
This layer is applied to dataset using map function
0.0 1.0

コードの解説

  • 画像のRGBチャンネル値は通常、[0, 255] の範囲にあります。
  • しかし、この範囲の値はニューラルネットワークにとって必ずしも理想的ではありません。
  • 一般的な目安として、ニューラルネットワークへの入力値は小さく保つことが推奨されます。
  • そこで、値を [0, 1] の範囲に収まるよう標準化します。
  • この処理には、Rescalingレイヤーを使用します。上記コードでは 1./255 を指定することで、各ピクセル値を255で除算しています。
  • map関数を呼び出してレイヤーをデータセットに適用することで、すべての画像に対して一括で正規化を行えます。
  • もう一つの方法として、正規化レイヤーをモデル定義の中に組み込むことも可能です。この場合、前処理がモデルの一部となるため、デプロイ(運用環境への配置)プロセスがシンプルになります。

まとめ

TensowFlowのRescalingレイヤーを活用すれば、画像データのピクセル値を[0, 1]の範囲に簡単に標準化でき、ニューラルネットワークの学習を安定させることができます。mapメソッドによる適用とモデル内への組み込み、どちらの手法も状況に応じて使い分けると良いでしょう。

  1. TensorFlowとPythonを使ってデータセットを視覚化する方法

    ここでは、花のデータセットを使用します。このデータセットは、Googleが提供するAPI経由でダウンロードでき、「get_file」メソッドにAPIのURLを引数として渡すことで、データを開発環境に取得できます。 ダウンロードしたデータは「matplotlib」ライブラリを使って視覚化できます。「imshow」メソッドを使用すると、コンソール上に画像を表示することが可能です。 TensorFlowとKerasの連携 関連記事: TensorFlowとは何か?KerasはどのようにTensorFlowと連携してニューラルネットワークを構築するのか? 本記事ではKeras Sequential

  2. Kerasを使ってPythonでモデルをプロットする方法をわかりやすく解説

    TensorFlowとはTensorFlowは、Googleが提供している機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究目的から本番環境での運用まで対応しており、複雑な数値計算を高速に実行するための最適化技術が数多く組み込まれています。TensorFlowにおける「テンソル(Tensor)」は、データを扱うための基本的なデータ構造です。テンソルは多次元配列(またはリスト)であり、データフローグラフと呼ばれる計算グラフのノード同士をエッジでつ