AI総合研究所

SHARE

X(twiiter)にポストFacebookに投稿はてなブックマークに登録URLをコピー

TensorFlowとは?できることや使い方、実際の使用例をわかりやすく解説!

この記事のポイント

  • TensorFlowは、様々な分野で活用されている強力なツールで、Pythonとの親和性が高く使いやすいライブラリです。
  • ディープラーニングや機械学習モデルの設計、トレーニング、デプロイメントに広く使用されており、オープンソースとして公開されています。
  • 多岐にわたる分野で実用例が紹介されており、特に画像認識や自然言語処理などに代表される応用機会が豊富です。
  • TensorFlow Liteを提供しており、モバイルや組み込みデバイスでも効率的な機械学習が可能です。

監修者プロフィール

坂本 将磨

Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。

機械学習やディープラーニングの領域で、Googleによって開発されたオープンソースライブラリ「TensorFlow」について知りたい方に向けて、この記事ではTensorFlowの概要から特徴、基本的な使い方、活用事例に至るまでを幅広く解説いたします。

Pythonを主として様々な言語での親和性も高く、オープンソースであるため開発者コミュニティによる手厚いサポートも特徴です。
また、画像認識や自然言語処理など、多岐に渡る分野での実用事例も紹介しますので、TensorFlowの実力を実感いただけるでしょう。無料で利用可能な点も魅力であり、最先端の技術へのアクセスを開放しています。

TensorFlowとは

TensorFlowは、Googleが開発したオープンソースの機械学習ライブラリです。ディープラーニングや機械学習を支える強力なツールで、数多くの企業や研究者に利用されています。

Pythonをはじめとする複数のプログラミング言語と親和性が高く、大規模なデータセットの処理トレーニングを効率的に行える点が特徴です。

Tensorflowアイコン公式サイトより引用

さらに、TensorFlowはオープンソースとして提供されているため、ユーザーは自由に改良を加えたり、共有したりすることができます。


TensorFlowの特徴

TensorFlowは多くの優れた特徴を持つ機械学習ライブラリです。これらの特徴により、研究者や開発者が効率よくモデル開発を行うことができます。
特徴イメージ

Pythonとの親和性

TensorFlowは、Pythonと非常に親和性が高く、Pythonユーザーにとって使いやすいライブラリです。

Pythonは機械学習分野で広く使用されており、TensorFlowもその環境に最適化されています。Pythonを使うことで、TensorFlowのAPIやツールを直感的に操作できます。

  • Pythonのライブラリとしての利便性
    • NumPyやPandasとの連携がスムーズ。
    • データ処理や前処理に強力なサポートを提供。

柔軟なアーキテクチャ

TensorFlowは、ニューラルネットワークだけでなく、機械学習全般に対応できる柔軟なアーキテクチャを持っています。
データフローグラフを利用したモデル設計が可能で、さまざまな種類のモデルを作成できます。

  • データフローグラフによる効率的な計算
  • モデルの学習過程が視覚化でき、デバッグや最適化がしやすい。

豊富なドキュメントとコミュニティ

TensorFlowは公式ドキュメントが非常に充実しており、初心者から上級者まで、さまざまなリソースを活用して学習できます。
また、広範なユーザーコミュニティがあり、問題解決や質問がしやすい環境が整っています。

  • 公式ドキュメント
  • 詳細なAPIリファレンスやチュートリアルが提供されており、すぐに学習を開始できます。

モバイルデバイスへの対応

TensorFlowは、モバイルや組み込みデバイス向けに最適化されたTensorFlow Liteを提供し、低リソース環境でも効率的な機械学習を可能にします。
軽量で高速な推論を実現し、スマートフォンや組み込みシステムでの利用に適しています。

  • 最適化と幅広いサポート
    • モバイル端末で動作するモデルを作成するためのツールや最適化手法が豊富。
    • iOSやAndroid向けアプリに簡単に組み込める環境を提供。

TensorFlowでできること

出来る事イメージ

TensorFlowは、多様な機械学習の用途に対応しています。以下はその代表的な活用分野です。

画像認識

TensorFlowを使って、画像を解析し、オブジェクト認識や分類を行うことができます。特に畳み込みニューラルネットワーク(CNN)は、画像認識において高い精度を発揮します。

  • 活用例
    • 顔認識や自動運転車の視覚システムに利用されています。

AIによる画像認識についてはこちらで詳しく解説しています。

自然言語処理

自然言語処理(NLP)の分野でもTensorFlowは活用されており、テキスト分類、感情分析、翻訳などのタスクに強力なツールを提供しています。

  • 活用例
    • チャットボットや翻訳システムに使用され、言語理解を向上させます。

自然言語処理について詳しくはこちらで解説しています。

時系列データ分析

TensorFlowは、時系列データを用いた予測にも利用できます。例えば、株価予測や需要予測などが可能です。

  • 活用例
    • 経済分析や在庫管理における予測精度の向上。

時系列データを扱うのが得意なニューラルネットワークであるLSTMについて、こちらで詳しく解説しています。

予測モデルの作成

TensorFlowを使用して、将来の動向を予測するためのモデルを作成することができます。これにより、ビジネスや運用の意思決定をサポートします。

  • 活用例
    • 顧客行動分析や製品の需要予測など。

AIによる需要予測に関しては、こちらで解説しています。


TensorFlowとPyTorchとの違い

TensorFlowとPytorchの比較イメージ左:PyTorchの公式サイトより引用、右:TensorFlowの公式サイトより引用

TensorFlowとPyTorchはどちらも深層学習で広く使われていますが、設計思想や使い勝手にいくつかの違いがあります。以下に3つの主要な違いを解説します。

1. 計算グラフの構築方法

  • TensorFlow
    静的グラフ(Static Graph)を基本とし、計算グラフを事前に定義します。この仕組みはモデルの最適化や移植性を高めますが、デバッグがやや複雑です。
    最近では、動的グラフをサポートするEager Executionが追加され、柔軟性が向上しました。

  • PyTorch
    動的グラフ(Dynamic Graph)を採用し、計算グラフをリアルタイムで構築します。この特徴により、Pythonコードに近い感覚でモデル記述やデバッグが可能です。

2. 学習プロセスのカスタマイズ

  • TensorFlow
    Kerasが統合されており、簡単にモデルを構築・学習できます。一方、カスタム処理が必要な場合は、低レベルAPIを利用する柔軟性もあります。

  • PyTorch
    シンプルな構造で、学習ループやカスタム層の設計が非常に直感的です。研究者や開発者が実験的なモデルを構築しやすい設計になっています。

3. サポートされるエコシステムとツール

  • TensorFlow
    Googleが開発しているため、Google CloudやTPU(Tensor Processing Unit)との統合が進んでいます。
    また、TensorFlow LiteやTensorFlow.jsを利用して、モバイルやブラウザ向けアプリケーションにも対応できます。

  • PyTorch
    Facebook(現在のMeta)が開発しており、Hugging FaceやFastAIなどの外部ライブラリとの連携が豊富です。
    特に自然言語処理(NLP)やコンピュータビジョン(CV)での利用が目立ちます。



どちらも目的に応じて選択することが重要です。

PyTorchについては、こちらで詳しく解説しています。


TensorFlowの基本的な使い方

ここでは、TensorFlowを使った環境設定から基本的な操作までを解説します。
以下の手順に従って進めてください。

なお、今回はAnacondaを使用して解説しています。

ステップ1:仮想環境の作成

TensorFlowのテスト用に、新しい仮想環境を作成します。以下のコマンドを実行してください。
ここでは、「tensorflow_test」という名前で、Pythonのバージョンを3.9としています。必要に応じて変更してください。

conda create -n tensorflow_test python=3.9



仮想環境が作成される際、「y」を入力してEnterを押すことでインストールが進みます。仮想環境の作成が完了すると、以下のように表示されます。

仮想環境の作成完了

ステップ2:仮想環境を有効化

次に、作成した仮想環境を有効化します。以下のコマンドを実行してください。

conda activate tensorflow_test


これで仮想環境が有効化されます。

仮想環境の有効化

ステップ3:TensorFlowのインストール

仮想環境内でTensorFlowをインストールします。以下のコマンドを実行してください。

pip install tensorflow



インストール中、進行状況が表示されます。

最終的に、以下のようにインストールが完了します。

Tensorflowインストール完了

また、後ほどの解説で使用する「matplotlib」もインストールしておきます。下記のコマンドを実行して下さい。

pip install matplotlib


実行中は先ほどと同様に、「y」を入力して「Enter」をクリックして下さい。

以下のように表示されればインストールが終了です。

matplotlibのインストール終了

ステップ4:テンソル操作の基本

TensorFlowの基礎はテンソル(多次元配列)操作です。以下に基本的なテンソル操作を示します。

テンソルの作成

以下のコードでテンソルを作成してみましょう。

import tensorflow as tf

# ゼロテンソル
x = tf.zeros([3, 3])

# ランダムテンソル
y = tf.random.normal([2, 3])

# 範囲指定テンソル
z = tf.range(0, 10, 2)

print(x, y, z)

実行すると、テンソルの内容が表示されます。
テンソルの作成

形状変換

テンソルの形状を変更する操作もよく使われます。

import tensorflow as tf

x = tf.random.normal([2, 3])

# リサイズ
y = tf.reshape(x, [3, 2])

# 次元を追加
z = tf.expand_dims(x, axis=0)

# 次元を削除
w = tf.squeeze(z)

print(y.shape, z.shape, w.shape)

形状変換

GPUへの転送

TensorFlowはGPUを自動検出して処理を最適化します。GPUが利用可能か確認するコードを以下に示します。


print("GPU Available:", tf.config.list_physical_devices('GPU'))


TensorFlowを用いて実際に画像分類をしてみた

今回は、Fashion-MNISTを用いた画像分類を実装していきたいと思います。

データセットの準備

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.datasets import fashion_mnist

(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

x_train = x_train.reshape(-1, 28, 28, 1) / 255.0
x_test = x_test.reshape(-1, 28, 28, 1) / 255.0

Fashion-MNISTデータセットを読み込み、CNNモデルに適した形式に変換する処理を行います。この処理にはデータの正規化や形状の変更が含まれます。

モデルの構築

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # 畳み込み層1
    MaxPooling2D((2, 2)),                                           # プーリング層1
    Conv2D(64, (3, 3), activation='relu'),                         # 畳み込み層2
    MaxPooling2D((2, 2)),                                           # プーリング層2
    Flatten(),                                                     # 平坦化
    Dense(128, activation='relu'),                                 # 全結合層
    Dropout(0.5),                                                  # ドロップアウト層
    Dense(10, activation='softmax')                                # 出力層
])

Fashion-MNISTデータセットを分類するためのCNN(畳み込みニューラルネットワーク)モデルを構築しています。畳み込み層とプーリング層を組み合わせて画像の特徴を抽出し、全結合層を用いて10クラス分類を行います。

モデルのコンパイル

model.compile(optimizer="adam",
              loss = "sparse_categorical_crossentropy",
              metrics=["accuracy"])

モデルをトレーニングする際の設定を行います。

モデルの学習

model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))

モデルを訓練データを使って学習させ、学習の進行状況をテストデータで検証します。

モデルの評価

test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f"テスト損失: {test_loss}, テスト精度: {test_accuracy}")

訓練済みモデルをテストデータで評価し、その結果を出力します。

予測結果の表示

import numpy as np
import matplotlib.pyplot as plt

# ランダムに5枚のテスト画像を選択
random_indices = np.random.choice(len(x_test), 5, replace=False)  # ランダムなインデックスを取得
sample_images = x_test[random_indices]
sample_labels = y_test[random_indices]

# 予測を実行
predictions = model.predict(sample_images)

# 結果を1つのプロットにまとめて表示
plt.figure(figsize=(10, 5))  # プロットのサイズを設定

for i in range(5):
    plt.subplot(1, 5, i + 1)  # 1行5列のサブプロットを作成
    plt.imshow(sample_images[i].reshape(28, 28), cmap='gray')  # 画像をグレースケールで表示
    pred_label = tf.argmax(predictions[i]).numpy()  # 予測ラベル
    true_label = sample_labels[i]  # 実際のラベル
    plt.title(f"predict:{pred_label}\ntrue:{true_label}")  # 予測(P)と実際(T)を表示
    plt.axis('off')  # 軸を非表示にする

plt.tight_layout()
plt.show()

ランダムに選ばれたテストデータ5枚に対してモデルの予測結果を表示し、実際のラベルと比較します。

全体のコード

上記の各項目で解説した内容をまとめると、下記のようになります。

#### データセットの準備
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.datasets import fashion_mnist

(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()

x_train = x_train.reshape(-1, 28, 28, 1) / 255.0
x_test = x_test.reshape(-1, 28, 28, 1) / 255.0

#### モデルの構築

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # 畳み込み層1
    MaxPooling2D((2, 2)),                                           # プーリング層1
    Conv2D(64, (3, 3), activation='relu'),                         # 畳み込み層2
    MaxPooling2D((2, 2)),                                           # プーリング層2
    Flatten(),                                                     # 平坦化
    Dense(128, activation='relu'),                                 # 全結合層
    Dropout(0.5),                                                  # ドロップアウト層
    Dense(10, activation='softmax')                                # 出力層
])


#### モデルのコンパイル

model.compile(optimizer="adam",
              loss = "sparse_categorical_crossentropy",
              metrics=["accuracy"])

#### モデルの学習

model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))


#### モデルの評価
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print(f"テスト損失: {test_loss}, テスト精度: {test_accuracy}")


#### 予測結果の表示
import numpy as np
import matplotlib.pyplot as plt

# ランダムに5枚のテスト画像を選択
random_indices = np.random.choice(len(x_test), 5, replace=False)  # ランダムなインデックスを取得
sample_images = x_test[random_indices]
sample_labels = y_test[random_indices]

# 予測を実行
predictions = model.predict(sample_images)

# 結果を1つのプロットにまとめて表示
plt.figure(figsize=(10, 5))  # プロットのサイズを設定

for i in range(5):
    plt.subplot(1, 5, i + 1)  # 1行5列のサブプロットを作成
    plt.imshow(sample_images[i].reshape(28, 28), cmap='gray')  # 画像をグレースケールで表示
    pred_label = tf.argmax(predictions[i]).numpy()  # 予測ラベル
    true_label = sample_labels[i]  # 実際のラベル
    plt.title(f"predict:{pred_label}\ntrue:{true_label}")  # 予測(P)と実際(T)を表示
    plt.axis('off')  # 軸を非表示にする

plt.tight_layout()
plt.show()


上記を実行してみます。

実行中は、以下のように学習が進みます。

モデルの学習中の表示

学習が終わると、以下のように予測結果が表示されます。

予測結果の表示

この結果は、ランダムに選ばれた5枚のテスト画像に対するモデルの予測(predict)と実際のラベル(true)を比較したものです。すべて実際のラベルと一致しており、正確に分類されている事が分かります。

トラブルシューティング

ModuleNotFoundError: No module named 'six'

上記のようなエラーが出てしまった場合は、以下を実行してみて下さい。

pip uninstall six
pip install --no-cache-dir six

TensorFlowの活用事例

TensorFlowは、さまざまな業界で幅広く利用されています。
以下では、特に注目すべき業界ごとの活用事例を紹介します。

Googleのサービスでの活用

TensorFlowは、Googleの多くのサービスや製品に組み込まれており、その強力な計算能力を支えています。

たとえば、Google Photosの画像認識機能やGoogle Translateの機械翻訳システムなど、TensorFlowを利用して日々の操作に役立っています。

    • Google Photos: 顔認識や画像分類をTensorFlowを使って実現。
    • Google Translate: 自然言語処理(NLP)を活用し、リアルタイムでの翻訳を提供。

医療分野での活用

医療分野では、画像診断や患者のデータ分析にTensorFlowが使用されています。
画像認識を通じて、CTスキャンやMRI画像から異常を検出するモデルが開発されています。

    • がんの早期発見: 医療画像を解析し、がん細胞や異常な病変を検出するためのモデル。
    • 遺伝子データ解析: 大規模な遺伝子データを用いて、疾病予測や治療法の最適化を行う研究。

金融分野での活用

金融業界でもTensorFlowは多くの用途で活用されています。
リスク評価や株価予測、クレジットカードの不正利用検出などで、TensorFlowの機械学習アルゴリズムが重要な役割を果たしています。

    • クレジットカード不正利用の検出: 異常な取引パターンを検出するために使用。
    • 株価予測: 時系列データ分析を通じて、株価の予測やリスク管理を支援。

製造業での活用

製造業では、工場の設備管理や製品の品質検査にTensorFlowが使用されています。
機械学習を活用して、生産ラインの効率化や故障予測を行い、コスト削減を実現しています。

    • 予知保全: 機器の故障予測を行い、メンテナンスコストを削減。
    • 製品の品質検査: カメラを使って製品の欠陥を検出する自動化システム。

まとめ

TensorFlowは、機械学習と深層学習の分野において非常に強力なツールであり、研究者、開発者、企業などに広く利用されています。Pythonとの親和性が高く、柔軟なアーキテクチャ、豊富なドキュメント、活発なコミュニティを備えているため、学習から実践まで多くのリソースが提供されています。

さらに、TensorFlowは多くの分野で活用されており、特に画像認識、自然言語処理、時系列データ分析、強化学習といった分野で強力な実績を残しています。Google、医療、金融、製造業など、さまざまな業界での応用事例からもその有用性が確認できます。

これからTensorFlowを始める人々には、公式ドキュメントやチュートリアルを参考にしながら、実際のプロジェクトに適用していくことをお勧めします。本記事が、あなたのTensorFlow活用の際の参考になれば幸いです。

AI活用のノウハウ集「AI総合研究所」サービスご紹介資料

「AI総合研究所 サービス紹介資料」は、AI導入のノウハウがないというお客様にも使いやすい最先端のAI導入ノウハウを知れる資料です。

資料ダウンロード
監修者

坂本 将磨

Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。

関連記事

AI導入の最初の窓口。

お悩み・課題に合わせて活用方法をご案内いたします。
お気軽にお問合せください。

AI総合研究所 Bottom banner

ご相談
お問い合わせは
こちら!