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

TensorFlowとPythonを使って事前学習済みモデルで特徴抽出を行う方法

TensorFlowでは、あらかじめ定義された特徴抽出用モデル(feature extractor)を「KerasLayer」メソッドに渡すことで、事前学習済みモデルを活用した特徴抽出が可能です。

転移学習の基本的な考え方

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

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

TensorFlow Hubとは

TensorFlow Hubは、事前学習済みのTensorFlowモデルを集めたリポジトリです。ここから取得したモデルを利用することで、学習済みモデルのファインチューニング(fine-tuning)を効率的に行えます。

本記事では、TensorFlow Hubのモデルをtf.kerasと組み合わせて使う方法を解説します。具体的には、TensorFlow Hubから画像分類モデルを読み込み、その後、カスタム画像クラス向けにモデルをファインチューニングする転移学習へと発展させます。まずは事前学習済みの分類器に入力画像を与えて推論させるだけで、追加の訓練なしに予測結果を得られることを確認しましょう。

以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上でPythonコードを実行できる環境で、設定不要・GPUへの無料アクセスが可能です。Jupyter Notebookを基盤として構築されています。

コード例

print("Extracting features")
feature_extractor_model = "https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4"
feature_extractor_layer = hub.KerasLayer(
feature_extractor_model, input_shape=(224, 224, 3), trainable=False)
feature_batch = feature_extractor_layer(image_batch)
print(feature_batch.shape)

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

実行結果

Extracting features
(32, 1280)

解説

  • 入力画像バッチから特徴量が抽出されます。
  • 「feature_extractor_layer」を使ってデータセットの特徴を取得します。ここではMobileNet V2の特徴ベクトル版モデルを指定し、trainable=Falseとすることで重みは固定され、純粋な特徴抽出器として動作します。
  • 抽出された特徴量の次元(この例では32サンプル×1280次元の特徴ベクトル)がコンソールに出力されます。
  1. PythonとKerasを使ってモデル全体を保存・再利用する方法を徹底解説

    TensorFlowとKerasとはTensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、各種アルゴリズムやディープラーニングアプリケーションの実装が可能になります。研究用途から本番環境まで幅広く活用されています。KerasはPythonで書かれたディープラーニングAPIです。高水準APIとして設計されており、生産性の高いインターフェースによって機械学習の問題を効率的に解決できます。TensorFlowフレームワーク上で動作し、素早い実験・試行を支援するために開発されました。高いスケーラビリティと

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

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