■TensorFlow+Keras(ディープラーニング)
KerasはTensorFlowを簡単に使えるようにするためのライブラリだったが、使いやすかったのでTensorFlowに取り込まれた
■Kerasでアヤメの分類
モデル定義部分にある「Dense」というのは、全結合ニューラルネットワーク
つまり「keras.layers.Dense」だけで1つのニューラルネットワークを表している
次の「keras.models.Sequential()」は、シーケンシャル(順番)にニューラルネットワークを追加するモデルを定義している
「Dense(10)」では、ユニット数が10個あるネットワークを作成している
またこのモデルで最終的な出力は3次元なので、「Dense(3)」によって出力ユニット数を3次元にしている
iris.csv は「Pandas(データ解析支援)でアヤメの分類」で使用したものと同じ
import tensorflow as tf
#import tensorflow.contrib.keras as keras
import tensorflow.keras as keras
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
# アヤメデータの読み込み
iris_data = pd.read_csv("iris.csv", encoding="utf-8")
# アヤメデータをラベルと入力データに分離する
y_labels = iris_data.loc[:,"Name"]
x_data = iris_data.loc[:,["SepalLength","SepalWidth","PetalLength","PetalWidth"]]
# ラベルデータをone-hotベクトルに直す
labels = {
'Iris-setosa': [1, 0, 0],
'Iris-versicolor': [0, 1, 0],
'Iris-virginica': [0, 0, 1]
}
y_nums = np.array(list(map(lambda v : labels[v] , y_labels)))
x_data = np.array(x_data)
# 学習用とテスト用に分割する
x_train, x_test, y_train, y_test = train_test_split(
x_data, y_nums, train_size=0.8)
# モデル構造を定義
Dense = keras.layers.Dense
model = keras.models.Sequential()
model.add(Dense(10, activation='relu', input_shape=(4,)))
model.add(Dense(3, activation='softmax'))
# モデルを構築
model.compile(
loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 学習を実行
model.fit(x_train, y_train,
batch_size=20,
epochs=300)
# モデルを評価
score = model.evaluate(x_test, y_test, verbose=1)
print('正解率=', score[1], 'loss=', score[0])
実行するとエラーになるようになっていたが、
$ python3 keras-iris.py
2021-02-06 15:24:33.126208: E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory
Traceback (most recent call last):
File "keras-iris.py", line 2, in <module>
import tensorflow.contrib.keras as keras
ModuleNotFoundError: No module named 'tensorflow.contrib'
kerasの読み込み部分を以下のようにすれば実行できた
バージョンアップによって読み込み方法が変わったのかもしれない
#import tensorflow.contrib.keras as keras
import tensorflow.keras as keras
以下で実行できた
$ python3.7 keras-iris.py
2021-02-20 12:48:40.802940: E tensorflow/core/platform/hadoop/hadoop_file_system.cc:132] HadoopFileSystem load error: libhdfs.so: cannot open shared object file: No such file or directory
WARNING:tensorflow:From /usr/local/lib/python3.7/dist-packages/tensorflow_core/python/ops/resource_variable_ops.py:1630: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) with constraint is deprecated and will be removed in a future version.
Instructions for updating:
If using Keras pass *_constraint arguments to layers.
Train on 120 samples
Epoch 1/300
120/120 [==============================] - 0s 1ms/sample - loss: 2.6795 - acc: 0.3583
Epoch 2/300
120/120 [==============================] - 0s 131us/sample - loss: 2.4687 - acc: 0.3583
Epoch 3/300
120/120 [==============================] - 0s 132us/sample - loss: 2.2803 - acc: 0.3583
〜中略〜
Epoch 298/300
120/120 [==============================] - 0s 143us/sample - loss: 0.1543 - acc: 0.9833
Epoch 299/300
120/120 [==============================] - 0s 142us/sample - loss: 0.1536 - acc: 0.9833
Epoch 300/300
120/120 [==============================] - 0s 143us/sample - loss: 0.1531 - acc: 0.9833
30/30 [==============================] - 0s 2ms/sample - loss: 0.1132 - acc: 0.9667
正解率= 0.96666664 loss= 0.11321666091680527
■学習メモ
book-mlearn-gyomu/tf-iris.py at master - kujirahand/book-mlearn-gyomu - GitHub
https://github.com/kujirahand/book-mlearn-gyomu/blob/master/src/ch5/iris/tf-iris.py
book-mlearn-gyomu/keras-iris.py at master - kujirahand/book-mlearn-gyomu - GitHub
https://github.com/kujirahand/book-mlearn-gyomu/blob/master/src/ch5/iris/keras-iris.py
【Pythonステップアップ!】高階関数mapの便利な使い方 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
https://www.sejuku.net/blog/24759
Pythonのlambdaって分かりやすい - Qiita
https://qiita.com/nagataaaas/items/531b1fc5ce42a791c7df