Tensorflow Keras〜初めのトレーニング_2:前処理〜

イントロダクション

前回はトレーニングの準備として、MNISTのデータを調べました。今回は前処理を行います。参考サイトは前回と同じです

関連ページ一覧

  1. Tensorflow Keras 〜初めてのKeras〜
  2. Tensorflow Keras Errors〜"python is not installed as a framework."〜
  3. Python Tensorflow 〜初めての人工知能(TensorFlowインストール)〜
  4. Tensorflow Keras〜初めのトレーニング_1〜

処理概要

  1. 前処理を行う
  2. 機械学習のモデル構築
  3. 同様にコンパイル
  4. 結果の表示(学習処理、学習の評価、予測)

とりあえずは、データをグラフ表示してみます。

<コード>

# 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)

なんだかわかったような、わからないような。。。釈然としませんが今回はここまでにしておきます。


投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す