Ubuntu 20.04 に TensorFlow + Keras の環境を構築するところから。
Docker コンテナ起動
TensorFlow 環境構築
前提パッケージインストール
TensorFlow 用 python 仮想環境作成
python3 -m venv --system-site-packages ./tensorflow
source ./tensorflow/bin/activate
pip install --upgrade pip
TensorFlow の pip パッケージインストール
インストール確認
ディープラーニング環境(Keras)構築
必要パッケージインストール
Iris の多クラス分類やってみる
以下ページを参考に、 Iris データの他クラス分類をやってみる。
プログラム作成
■ iris.py
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
from keras.utils import np_utils
from sklearn import datasets
from sklearn.model_selection import train_test_split
import numpy as np
## データ準備
# 乱数を固定値で初期化し再現性を持たせる
np.random.seed(0)
# pip パッケージ scikit-learn の datasets から、 iris データをロード
# X: インプットデータ
# T: 正解データ
iris = datasets.load_iris()
X = iris.data
T = iris.target
# 数値を、位置に変換 [0,1,2] ==> [ [1,0,0],[0,1,0],[0,0,1] ]
T = np_utils.to_categorical(T)
# データを訓練用とテスト用に分割
train_x, test_x, train_t, test_t = train_test_split(X, T, train_size=0.8, test_size=0.2)
## モデル作成
# Sequential モデル生成
model = Sequential()
# 入力パラメーターが以下 4 つなので input_dim=4
# - sepal length: がくの長さ
# - sepal width: がくの幅
# - petal length: 花弁の長さ
# - petal width: 花弁の幅
input_dim=4
# 出力は以下 3 種なので units=3
# - 0: Iris-Setosa(セトナ)
# - 1: Iris-Versicolour(バーシクル)
# - 2: Iris-Virginica(バージニカ)
units=3
# 入力層追加
model.add(Dense(input_dim))
model.add(Dense(units))
# 活性化関数
# 多クラス・単ラベル問題なので、 softmax を選択。
model.add(Activation('softmax'))
# モデルのコンパイル
# 多クラス・単ラベル問題なので、 categorical_crossentropy を選択。
model.compile(
loss='categorical_crossentropy',
optimizer=SGD(learning_rate=0.1),
metrics=['accuracy'])
# トレーニング実行
model.fit(train_x, train_t, verbose=2, epochs=1000, batch_size=32)
# 学習済みモデルでテストデータを分類する
Y = np.argmax(model.predict(test_x), axis=-1)
## 結果検証確認
# to_categorical の逆変換
_, T_index = np.where(test_t > 0)
# 結果出力
print()
print('RESULT')
print(Y == T_index)
動作確認
time python3 iris.py
2021-06-26 17:50:45.659627: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-06-26 17:50:45.659673: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
...(snip)
Epoch 1000/1000
4/4 - 0s - loss: 0.0784 - accuracy: 0.9667
RESULT
[ True True True True True True True True True True True True
True True True True True True True True True True True True
True True True True True True]
real 0m53.467s
user 0m26.458s
sys 0m8.617s
以上。
参考資料
- pip での TensorFlow のインストール
- 入門 Keras (4) 多クラス分類 – Iris データを学習する | 株式会社インフィニットループ技術ブログ
- 1つの画像が複数のクラスに属する場合(Multi-label)の画像分類 - Qiita
- 二値、多値、多ラベル分類タスクの評価指標 - Qiita
- tf.keras.metrics.Accuracy | TensorFlow Core v2.5.0
- tf.keras.metrics.BinaryAccuracy | TensorFlow Core v2.5.0
- Sequentialモデルのガイド - Keras Documentation
- Modelクラス (functional API) - Keras Documentation
0 件のコメント:
コメントを投稿