イントロダクション
前回はトレーニングの準備として、MNISTのデータを調べました。今回は前処理を行います。参考サイトは前回と同じです。
関連ページ一覧
- Tensorflow Keras 〜初めてのKeras〜
- Tensorflow Keras Errors〜"python is not installed as a framework."〜
- Python Tensorflow 〜初めての人工知能(TensorFlowインストール)〜
- Tensorflow Keras〜初めのトレーニング_1〜
処理概要
- 前処理を行う
- 機械学習のモデル構築
- 同様にコンパイル
- 結果の表示(学習処理、学習の評価、予測)
とりあえずは、データをグラフ表示してみます。
<コード>
# TensorFlow and tf.keras import tensorflow as tf from tensorflow import keras # Helper libraries import numpy as np import matplotlib.pyplot as plt print(tf.__version__) # Get MINST data fashion_minst = keras.datasets.fashion_mnist (train_images, train_labels), (test_images, test_labels) = fashion_minst.load_data() # Chcke MINST data print("トレーニングイメージ数(train_images.shape):%s " % (train_images.shape,)) print("トレーニングラベル数(len(train_labels)): %d" % len(train_labels)) print("トレーニングラベルの中身: %d" % train_labels[0]) # First Check IMG plt.figure() plt.imshow(train_images[0]) plt.colorbar() plt.grid(False) plt.show()
前処理
参考サイトによると以下のように記載があります。
ニューラルネットワークモデルにフィードする前に、 これらの値を0から1の範囲にスケーリングします。 これには、画像コンポーネントのデータ型を整数からfloatにキャストし、 255で割ります。これは、画像を前処理する関数です。
どうやら0〜1の範囲に値を置き換える必要があるようです。
そして変更してから実行します。表示はできたけどスクロールするとMacではクラッシュしてしまうようです。(自分はしました。)今回は機械学習をやるのでグラフ表示は後回しにします。
【追伸】グラフはTensorBordで表示したいと思っています。
結局
データが0-255の範囲で設定されているのでそれを0-1の範囲に変更するということをしました。
機械学習モデルの構築
# Create Model set layers model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(10, activation=tf.nn.softmax) ])
機械学習モデルのコンパイル
レイヤーを設定する
ニューラルネットワークの基本的な構成要素はレイヤーです。レイヤーは、そこに送られたデータから表現を抽出します。そして、うまくいけば、これらの表現は当面の問題にとってより意味があります。ディープラーニングの大部分は、単純なレイヤーを連鎖させることから成ります。同様にtf.keras.layers.Dense、ほとんどのレイヤーにはトレーニング中に学習されるパラメータがあります。
学習結果の1つを表示します。上が実行結果です。
モデルの訓練
コードとしては1行で終わります。
model.fit(train_images, train_labels, epochs=5)
ここで渡しているのはイメージとラベルを渡しています、最後の「epocks」はこのサイトで調べました。
単に
epochs
という指標に試行が達するまで訓練します
ということのようです。※意味はわかっていません。
とりあえずは上の画像が予測の結果です。
そして、テストデータの中の1つを取得してその予測結果を表示しました。
注意点としては
model.predict
データのバッチ内の各画像に対して1つずつ、リストのリストを返します。バッチ内の(唯一の)画像の予測を取得します
ということです。コードで書くと下のようにやってくださいということでした。
# Add the image to a batch where it's the only member. img = (np.expand_dims(img,0)) print(img.shape) predictions_single = model.predict(img) print(predictions_single)
なんだかわかったような、わからないような。。。釈然としませんが今回はここまでにしておきます。