TensorFlowでバッチ次元を追加し、Pythonで画像をモデルに渡す方法
TensorFlowでは、画像をNumPy配列に変換することでバッチ次元を追加し、その画像をモデルに渡すことができます。
関連記事: TensorFlowとは何か?KerasはどのようにTensorFlowと連携してニューラルネットワークを構築するのか?
少なくとも1つの畳み込み層(コンボリューション層)を含むニューラルネットワークは「畳み込みニューラルネットワーク(CNN)」と呼ばれます。CNNを活用することで、画像認識などの高度な学習モデルを構築できます。
以下のコードはGoogle Colaboratory上で実行しています。Google Colab(Colaboratory)はブラウザ上で直接Pythonコードを実行できる環境であり、面倒な設定が一切不要で、GPU(グラフィックス処理装置)にも無料でアクセスできます。ColaboratoryはJupyter Notebookをベースに構築されています。
画像分類における転移学習の基本的な考え方は、「大規模で汎用的なデータセットで学習されたモデルは、視覚世界における汎用モデルとして効果的に機能できる」というものです。こうしたモデルはすでに特徴マップを学習済みであるため、ユーザー側で大規模データセットを使って大規模モデルをゼロから訓練し直す必要はありません。
TensorFlow Hubは、事前学習済みのTensorFlowモデルを集めたリポジトリです。TensorFlow Hubのモデルを利用することで、学習モデルのファインチューニングも簡単に行えます。
ここでは、tf.kerasと組み合わせてTensorFlow Hubのモデルを使用する方法を紹介します。まず、TensorFlow Hubから画像分類モデルを取得し、画像を入力して分類結果を予測させます。その後、転移学習によってカスタム画像クラス向けにモデルをファインチューニングすることも可能です。事前学習済みの分類器モデルを使えば、画像を入力して何が写っているかを予測でき、これは特別な訓練なしでも実行できます。
サンプルコード
grace_hopper = np.array(grace_hopper)/255.0
print("The dimensions of the image are")
print(grace_hopper.shape)
result = classifier.predict(grace_hopper[np.newaxis, ...])
print("The dimensions of the resultant image are")
print(result.shape)
predicted_class = np.argmax(result[0], axis=-1)
print("The predicted class is")
print(predicted_class)
コード出典 − https://www.tensorflow.org/tutorials/images/transfer_learning_with_hub
実行結果
The dimensions of the image are (224, 224, 3) The dimensions of the resultant image are (1, 1001) The predicted class is 819
解説
- np.newaxisを使って、画像データにバッチ次元を追加しています。
- バッチ次元を含めた画像をモデルの入力として渡します。
- モデルの出力は、1001個の要素を持つロジット(logits)のベクトルになります。
- このベクトルは、画像が各クラスに属する確率を評価したものです。
- 最後にnp.argmaxにより、最も確率の高いクラス番号(819)を特定しています。
-
PythonとKerasを使ってモデル全体を保存・再利用する方法を徹底解説
TensorFlowとKerasとはTensorFlowは、Googleが提供する機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、各種アルゴリズムやディープラーニングアプリケーションの実装が可能になります。研究用途から本番環境まで幅広く活用されています。KerasはPythonで書かれたディープラーニングAPIです。高水準APIとして設計されており、生産性の高いインターフェースによって機械学習の問題を効率的に解決できます。TensorFlowフレームワーク上で動作し、素早い実験・試行を支援するために開発されました。高いスケーラビリティと
-
Kerasを使ってPythonでモデルをプロットする方法をわかりやすく解説
TensorFlowとはTensorFlowは、Googleが提供している機械学習フレームワークです。オープンソースとして公開されており、Pythonと組み合わせて使用することで、アルゴリズムの実装やディープラーニングアプリケーションの開発など、幅広い用途に活用できます。研究目的から本番環境での運用まで対応しており、複雑な数値計算を高速に実行するための最適化技術が数多く組み込まれています。TensorFlowにおける「テンソル(Tensor)」は、データを扱うための基本的なデータ構造です。テンソルは多次元配列(またはリスト)であり、データフローグラフと呼ばれる計算グラフのノード同士をエッジでつ