TensorFlowによる機械学習

TensorFlow(テンサーフロー,テンソルフロー)は Google の機械学習ライブラリである。

TensorFlow 2.2.0 が出た。Python 3.8 でも大丈夫。

pip install tensorflow

で入るはずである。

tf.keras を使う上では TensorFlow 1 系 と 2 系で見かけ上の違いはほぼない。

TensorFlow 2 で 1.x のコードを走らるには

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

とする。

TensorFlow 1.x のコードを 2.x 用に変換するには

tf_upgrade_v2 --intree dir/ --outtree dir2/ --reportfile report.txt

と打ち込む。dir/ が元のディレクトリ,dir2/ は新しく作られるディレクトリ(あらかじめ作成しておいてはいけない)。必ずしもうまくいくとは限らない。

Google Colab は現時点ではまだ 1.14.0 である。2.x を使うには,インポートの前に

%tensorflow_version 2.x

と打ち込むようだ。

インポートする:

import tensorflow as tf

バージョンを確認する:

In [ ]: tf.__version__
Out[ ]: '2.2.0'

In [ ]: tf.keras.__version__
Out[ ]: '2.3.0-tf'

ごくごく簡単な例として,TensorFlow のチュートリアルの最初の例をやってみる。データには有名な MNIST を使う。これは28×28ピクセルの手書き画像で,ピクセル値は0から255までの整数である。

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

ピクセルは0〜255の整数値だが,0〜1の実数に変換する:

x_train = x_train / 255.0
x_test  = x_test  / 255.0

ごくごく簡単なモデルを定義する:

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

いよいよフィット(重い):

model.fit(x_train, y_train, epochs=5)

最後に評価:

model.evaluate(x_test, y_test)

正解率 0.977 程度である。

予測は次のようにして求められる:

y_pred = np.argmax(model.predict(x_test), axis=-1)

混同行列を求める:

tf.math.confusion_matrix(y_test, y_pred)

結果の例:

<tf.Tensor: shape=(10, 10), dtype=int32, numpy=
array([[ 970,    0,    2,    0,    1,    0,    4,    1,    2,    0],
       [   0, 1127,    3,    1,    0,    0,    2,    0,    2,    0],
       [   6,    0, 1007,    4,    4,    0,    2,    2,    7,    0],
       [   0,    0,    7,  992,    1,    1,    0,    5,    3,    1],
       [   1,    0,    0,    0,  965,    0,    6,    0,    1,    9],
       [   4,    0,    0,   16,    2,  861,    4,    1,    3,    1],
       [   4,    3,    1,    1,    3,    3,  941,    0,    2,    0],
       [   3,    5,    8,    4,    3,    0,    0,  994,    2,    9],
       [   2,    2,    4,   12,    5,    5,    2,    3,  937,    2],
       [   2,    6,    0,    5,   14,    1,    0,    4,    0,  977]],
      dtype=int32)>

学習済みのモデルをHDF5形式で保存する:

model.save("mymodel.h5")

保存したモデルは次のようにして読み出す:

model = tf.keras.models.load_model("mymodel.h5")

Last modified: