🏹
TensorFlow の概念と python 実装例
TensorFlowとは
概念
TensorFlow は Google が開発したオープンソースの機械学習フレームワークであり,深層学習を中心に,大規模な数値計算や機械学習モデルの構築・学習・推論に用いられています.本記事では Python による実装例を示しますが,C++, JavaScript (TensorFlow.js)などからも利用できます.
特徴
- 自動微分:機械学習の上で必要な勾配を自動的に計算できます
- GPU や TPU を活用した高速化:大規模な行列演算を効率よく実行できます
- Keras を用いた高レベル API:直感的にニューラルネットワークを構築できる Keras API が公式に同梱されているため,短いコードでモデルを定義しやすいです.
Python で TensorFlow を使う例
まず,非常にシンプルな例として「入力値
環境準備
Google Colab を利用する場合は必要ありませんが,下記のコマンドでインストールできます.
pip install tensorflow
数値予測サンプルコード
import tensorflow as tf
import numpy as np
# 1) 線形回帰モデルを定義
# 全結合(Dense)の一層だけを持つ単純なモデルです
# shape=(1,) は入力が 1 次元であることを意味します
# units=1 は出力ニューロン数が 1 つであることを意味します。
model = tf.keras.Sequential([
tf.keras.Input(shape=(1,)),
tf.keras.layers.Dense(units=1)
])
# 2) モデルのコンパイル
# - 損失関数: mean_squared_error (平均二乗誤差)
# - 最適化手法: SGD (確率的勾配降下法)
model.compile(optimizer='sgd', loss='mean_squared_error')
# 3) 学習データ作成
# ここでは例として、 y = 2x - 1 を満たすデータを用意します
# xs: 入力 (x)、ys: 出力 (y)
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0], dtype=float)
# 4) モデルの学習 (フィッティング)
# epochsは学習を何回繰り返すか(反復回数)を指定します
# verbose=0 にすると学習のログ出力を抑制します
model.fit(xs, ys, epochs=500, verbose=0)
# 5) 推論 (予測)
# 学習したモデルに、新しい入力値を与えたときの出力を確認します
test_value = np.array([[10.0]])
prediction = model.predict([test_value])
print(f"x={test_value} のときの予測値は {prediction[0][0]} です")
これを実行すると以下の結果が出力されます.
x=[[10.]] のときの予測値は 18.990312576293945 です
このコードでは学習データから
ここでの tensorflow の役割は model の定義とモデルの学習になります.tf
を用いて定義された変数 model は model.fit(条件)
にて学習することができます.
手書き数字の画像分類サンプルコード
AI の性能を測るとき,手書き文字のデータセット「MNIST」を用いた分類問題がよく用いられます.TensorFlow では mnist データセットが既にあるので,それを load_data()
で読み取り,学習に用います.最終的にはテストデータの分類問題の正解率で評価します.
import tensorflow as tf
from tensorflow import keras
# MNIST データの読み込み (28x28ピクセルの手書き数字画像)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 画素値を 0~1 の範囲に正規化
x_train = x_train / 255.0
x_test = x_test / 255.0
# モデルを定義 (全結合ネットワーク)
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)), # 28x28 の画像を 784 次元ベクトルに変換
keras.layers.Dense(128, activation='relu'), # 隠れ層
keras.layers.Dense(10, activation='softmax') # 出力層 (0~9 の10クラス分類)
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 学習
model.fit(x_train, y_train, epochs=5)
# テストデータで評価
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0)
print(f"テストデータに対する正解率: {test_acc:.3f}")
出力結果
テストデータに対する正解率: 0.972
Life is like a boat
Discussion