TensorFlowのTutorialをやってみたので、そのメモ。
この記事ではIrisデータセットの分類を通して、TensorFlowの基本的な使い方を勉強していきます。
なお、モデルの生成と学習にはTensorFlowの高レベルAPIのtf.kerasを使います。
環境
インストールはpipでしました。
pip install tensorflow
関連リンク
Basic Tutorial
Sequential Model
損失関数
目的関数
ライブラリのインポート
必要なライブラリをインポートする。
import numpy as np
import tensorflow as tf
from tensorflow import keras
from sklearn import datasets
from sklearn.model_selection import train_test_split
データの用意
sklearnで用意されているIrisデータセットを使います。
データを学習用とテスト用に分けます。
iris = datasets.load_iris()
train_x, test_x, train_t, test_t = train_test_split(iris.data, iris.target, test_size=0.1)
データの中身
Irisデータセットにはアヤメの品種データ150件があり、それぞれ50件ずつSetosa、Versicolor、Virginicaの3品種に分類されています。
それぞれの品種にはSepal Length(がく片の長さ)、Sepal Width(がく片の幅)、Petal Length(花びらの長さ)、Petal Width(花びらの幅)の4つの特徴量があります。
今回、データを学習用とテスト用に分けましたが、その際にtest_size=0.1
としたので学習データは135件、テストデータは15件となっています。
train_x.shape
>>> (135, 4)
前処理
以下のコードで前処理をしています。特徴量のなかで最大の値を見つけてきて、学習データとテストデータを最大値で割っています。こうすることで特徴量を0以上1以下にしています。
maxv = np.max(iris.data)
train_x = train_x / maxv
test_x = test_x / maxv
モデルを作る
データの用意ができたので、ニューラルネットワークのモデルを作り、学習処理に関する設定をします。
kerasを使って入力層、隠れ層、出力層の3層からなるニューラルネットワークを作ります。
model = keras.Sequential([
keras.layers.Dense(6, input_shape=(4, )),
keras.layers.Dense(4, activation=tf.nn.relu),
keras.layers.Dense(3, activation=tf.nn.softmax)
])
学習処理の設定
モデルを作りましたが、学習をする前に、いくつか学習処理に関しての設定をここでします。
ここでは、Loss function、Optimizer、Metricsの3つの設定をしています。
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
学習する
学習を開始するには、fit
を使います。
verbose=0
にしてログを非表示にしています。
model.fit(train_x, train_t, batch_size=20, epochs=100, verbose=0)
テストする
テストデータを使って、モデルの性能を見ます。
test_loss, test_acc = model.evaluate(test_x, test_t)
print("Test accuracy:", test_acc)
import numpy as np
import tensorflow as tf
from tensorflow import keras
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris = datasets.load_iris()
train_x, test_x, train_t, test_t = train_test_split(iris.data, iris.target, test_size=0.1)
maxv = np.max(iris.data)
train_x = train_x / maxv
test_x = test_x / maxv
model = keras.Sequential([
keras.layers.Dense(6, input_shape=(4, )),
keras.layers.Dense(4, activation=tf.nn.relu),
keras.layers.Dense(3, activation=tf.nn.softmax)
])
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_x, train_t, batch_size=20, epochs=100, verbose=0)
test_loss, test_acc = model.evaluate(test_x, test_t)
print("Test accuracy:", test_acc)