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

TensorFlowとPythonで分類ヘッドを追加する方法|転移学習の実装手順を解説

TensorFlowでは、事前に定義した特徴抽出モデル(feature extractor)を活用し、Dense層を持つSequentialモデルを構築することで、分類ヘッド(classification head)を簡単に追加できます。

前提知識:転移学習とは

少なくとも1つの畳み込み層(Convolutional Layer)を含むニューラルネットワークは「畳み込みニューラルネットワーク(CNN)」と呼ばれ、画像認識などの学習モデル構築に広く利用されています。

画像分類における転移学習の基本的な考え方は、「大規模で汎用的なデータセットで学習済みのモデルは、視覚世界における汎用モデルとして効果的に機能する」というものです。このようなモデルはすでに特徴マップ(feature maps)を学習しているため、ユーザーは大規模データセットを使って巨大なモデルをゼロから訓練し直す必要がありません。

TensorFlow Hubの活用

TensorFlow Hubは、事前学習済みのTensorFlowモデルを集めたリポジトリです。ここから取得したモデルをベースに、TensorFlowを使ってファインチューニング(fine-tuning)を行うことができます。

本記事では、TensorFlow Hubのモデルをtf.kerasと組み合わせて使う方法を解説します。具体的には、TensorFlow Hubから画像分類モデルを取得し、その後、カスタム画像クラス向けにモデルをファインチューニングする流れを紹介します。事前学習済みの分類モデルに入力画像を与えて予測させる処理は、追加の訓練なしでも実行可能です。

なお、以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上でPythonコードを実行できる環境で、設定不要かつGPU(グラフィックス処理装置)へ無料でアクセスできます。Jupyter Notebookを基盤として構築されています。

コード例:分類ヘッドの追加

print("Attaching a classification head")
num_classes = len(class_names)
model = tf.keras.Sequential([
    feature_extractor_layer,
    tf.keras.layers.Dense(num_classes)
])
print("The base architecture of the model")
model.summary()
print("The predictions are made")
predictions = model(image_batch)
print("The dimensions of the predictions")
predictions.shape

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

実行結果

Attaching a classification head
The base architecture of the model
Model: "sequential_3"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
keras_layer_1 (KerasLayer)   (None, 1280)              2257984
_________________________________________________________________
dense_3 (Dense)              (None, 5)                 6405
=================================================================
Total params: 2,264,389
Trainable params: 6,405
Non-trainable params: 2,257,984
_________________________________________________________________
The predictions are made
The dimensions of the predictions
TensorShape([32, 5])

解説

  • まず、クラス名リストの長さから分類数(num_classes)を取得し、特徴抽出層の後にDense層を連結したSequentialモデルとして分類ヘッドを追加します。
  • 次に、summary()メソッドを呼び出すことで、モデルの基本アーキテクチャ(各層の種類・出力形状・パラメータ数)を確認できます。
  • この例では、特徴抽出層の出力が1280次元であり、最終的なDense層が5クラスに対応していることがわかります。
  • バッチ画像(image_batch)をモデルに入力すると、形状が[32, 5]の予測テンソルが出力されます。これは「32枚の画像それぞれに対して5クラス分のスコア」を意味します。
  • また、全パラメータのうち学習対象(Trainable)は6,405のみで、それ以外は凍結されているため、効率的な転移学習が可能です。
  1. TensorFlowとPythonで線形モデルをトレーニングする方法を解説

    TensorFlowとは TensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて各種アルゴリズムやディープラーニングアプリケーションなどを実装できます。研究用途だけでなく、本番環境(プロダクション)でも幅広く利用されています。 TensorFlowのインストール方法 Windows環境では、以下のコマンドを実行するだけで「tensorflow」パッケージをインストールできます。 pip install tensorflow テンソル(Tensor)とは何か テンソルはTensorFlowにおける基本的なデータ

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

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