[2024-12-30] 古い「TensorFlowによる機械学習」をとりあえず改訂しました。TensorflowからKerasが独立したので「Kerasによる・・・」という題名のほうが適切になりました。
TensorFlow(テンサーフロー,テンソルフロー)は Google の機械学習ライブラリである。今は PyTorch のほうが流行りである。Tensorflow の一部であった Keras は独立して Keras 3 となったが、tf-keras
を入れることで Keras 2 も使える。
インストールは、Apple Silicon を含め、
pip install tensorflow
でできるはずである。Keras 3 を入れるには
pip install keras
Keras 2 を入れるには
pip install tf-keras
とする。
インポートする:
import tensorflow as tf
バージョンを確認する:
tf.__version__
'2.18.0'
Keras については、Keras 2 を使うなら
import tf_keras as keras keras.__version__
'2.18.0'
Keras 3 を使うなら
import keras keras.__version__
'3.7.0'
ごくごく簡単な例として,TensorFlow のチュートリアルに昔あった最初の例をやってみる。データには有名な MNIST を使う。これは28×28ピクセルの手書き画像で,ピクセル値は0から255までの整数である。
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
初回はネットからダウンロードするが次回からは ~/.keras 以下のキャッシュ(11Mバイトくらい)を使う。ピクセルは0〜255の整数値だが,0〜1の実数に変換する:
x_train, x_test = x_train / 255.0, x_test / 255.0
ごくごく簡単なモデルを定義する:
model = keras.models.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dropout(0.2), keras.layers.Dense(10) ]) loss_fn = keras.losses.SparseCategoricalCrossentropy(from_logits=True) model.compile(optimizer='adam', loss=loss_fn, metrics=['accuracy'])
フィット:
model.fit(x_train, y_train, epochs=5)
Keras 2 による経過の例(Mac mini (M1 2020)):
Epoch 1/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.2911 - accuracy: 0.9150 Epoch 2/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.1432 - accuracy: 0.9571 Epoch 3/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.1079 - accuracy: 0.9678 Epoch 4/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.0869 - accuracy: 0.9736 Epoch 5/5 1875/1875 [==============================] - 4s 2ms/step - loss: 0.0741 - accuracy: 0.9766
Keras 3 による経過の例(Mac mini (M1 2020)):
Epoch 1/5 1875/1875 ━━━━━━━━━━━━━━━━━━━━ 2s 805us/step - accuracy: 0.8655 - loss: 0.4684 Epoch 2/5 1875/1875 ━━━━━━━━━━━━━━━━━━━━ 1s 790us/step - accuracy: 0.9556 - loss: 0.1505 Epoch 3/5 1875/1875 ━━━━━━━━━━━━━━━━━━━━ 1s 794us/step - accuracy: 0.9673 - loss: 0.1075 Epoch 4/5 1875/1875 ━━━━━━━━━━━━━━━━━━━━ 1s 790us/step - accuracy: 0.9730 - loss: 0.0891 Epoch 5/5 1875/1875 ━━━━━━━━━━━━━━━━━━━━ 1s 794us/step - accuracy: 0.9747 - loss: 0.0798
最後に評価:
model.evaluate(x_test, y_test)
正解率 0.977 程度である。
予測は次のようにして求められる:
y_pred = tf.argmax(model.predict(x_test), axis=-1).numpy()
混同行列を求める:
tf.math.confusion_matrix(y_test, y_pred)
結果の例:
<tf.Tensor: shape=(10, 10), dtype=int32, numpy= array([[ 969, 0, 1, 2, 2, 2, 2, 1, 1, 0], [ 0, 1118, 3, 1, 0, 1, 4, 1, 7, 0], [ 3, 2, 1011, 3, 1, 0, 2, 5, 5, 0], [ 0, 0, 5, 992, 0, 4, 0, 3, 4, 2], [ 2, 0, 5, 0, 954, 1, 4, 2, 2, 12], [ 3, 0, 0, 11, 2, 863, 5, 1, 6, 1], [ 5, 3, 1, 0, 1, 3, 944, 0, 1, 0], [ 1, 5, 11, 4, 0, 0, 0, 995, 2, 10], [ 2, 0, 3, 6, 5, 3, 2, 3, 948, 2], [ 2, 6, 0, 7, 9, 2, 1, 3, 4, 975]], dtype=int32)>
学習済みのモデルをHDF5形式で保存する:
model.save("mymodel.h5")
保存したモデルは次のようにして読み出す:
model = keras.models.load_model("mymodel.h5")