見出し画像

やってみよう!機械学習 - keras(TensorFlow)2

いよいよモデルを作っていきます。

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

"tf.keras.Sequential()"でレイヤーを重ねていきます。わかりにくいのでここではモデルの作り方は必要な部品を組み合わせる作業ということで理解しておくと良いと想います。最初のレイヤーは"tf.keras.layers.Flatten" です。このレイヤーは、画像を(28 × 28 ピクセルの)2 次元配列から、28×28=784 ピクセルの、1 次元配列に変換します。このレイヤーが、画像の中に積まれているピクセルの行を取り崩し、横に並べると考えてください。

このレイヤーには学習すべきパラメータはなく、データのフォーマット変換を行うだけです。

 tf.keras.layers.Dense(128, activation='relu'),
 tf.keras.layers.Dense(10)

この2つが欲しいデータの振り分けしてくれるレイヤーになります。

128個のノードがあり(Dense:全結合層)、選択物を不振り分けられるための重みづけ等、活性化関数(activation='relu')の条件が設定されています。

最終10個のデータに該当のものがなんなのかを集約して確率で表示します。

 続いてコンパイルと呼ばれる、トレーニングによる最適化するために必要な処理をします。

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

optimizer='adam',  ・・・ 最適化する方法を指定
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), ・・・ 損失関数(パラメータの最適化に必要)
metrics=['accuracy'])  ・・・ 正確性確認

ここまできたらあとはモデルの訓練です。

model.fit(train_images, train_labels, epochs=10)

実行します。

1875/1875 [==============================] - 4s 2ms/step - loss: 0.2373 - accuracy: 0.9109
<keras.callbacks.History at 0x7f69f023ab80>

10回操作を繰り返し、最後には

accuracy: 0.9109

91%の確率で正解しています。

予測していきます。ソフトマックスレイヤーを適応して、モデルの線形出力である確率に変換します。

probability_model = tf.keras.Sequential([model, 
                                         tf.keras.layers.Softmax()])

次に

predictions = probability_model.predict(test_images)

一つ見てみます

predictions[0]

array([1.3785142e-07, 5.0531153e-09, 1.8942094e-06, 4.7222308e-08, 1.8610937e-06, 2.8938803e-04, 4.6063610e-06, 4.2017400e-03, 2.0889676e-05, 9.9547946e-01], dtype=float32)

np.argmax(predictions[0])

"9"と出てきます。

このモデルは、この画像が、アンクルブーツ、class_names[9]である可能性が最も高いと判断したことになります。

モデルを保存してみます。

from tensorflow.python.keras.models import load_model


model9 = load_model('model.hdf5')

確かめてみます。

model9.summary()
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten (Flatten)            (None, 784)               0         
_________________________________________________________________
dense (Dense)                (None, 128)               100480    
_________________________________________________________________
dense_1 (Dense)              (None, 10)                1290      
=================================================================
Total params: 101,770
Trainable params: 101,770
Non-trainable params: 0

しっかりと保存ずみのモデルが読み込めています。

予測してみます。

probability_model9 = tf.keras.Sequential([model9, tf.keras.layers.Softmax()])
predictions9 = probability_model9.predict(test_images)
predictions9[0]

実行すると

array([8.0042817e-08, 6.6233591e-10, 3.4499703e-10, 1.2798741e-10,
       7.8680031e-09, 2.3978177e-04, 9.8517837e-08, 4.2305542e-03,
       5.3248232e-09, 9.9552947e-01], dtype=float32)

保存前のものと同じようにうまく予測できています。

モデルの作成、保存、実行ができました。


この記事が気に入ったらサポートをしてみませんか?