TensorFlow Keras〜回帰、準備から予測まで〜

イントロダクション

今までは、データセットの準備やデータの中身を見ることに注力していたようですが今回は全体的な処理の流れをチュートリアルでやるようです。参考サイト

そしてもう1つ、前回までは「分類」を行なっていたのに対し今回は「回帰分析」を行うようです。実際にチュートリアルをやってみましたが「回帰分析」がよくわからなかったので今回の学習もよくわからず終いでした。

あとで回帰分析も理解したいと思います。

<今までのチュートリアル>

  1. Tensorflow Keras〜初めのトレーニング_1〜
  2. Tensorflow Keras〜初めのトレーニング_2:前処理〜
  3. TensorFlow Keras〜テキストの分類〜

本題

初めに「seaborn」パッケージをインストールします。

# Use seaborn for pairplot
!pip install -q seaborn

しかし、自分の端末では上のコマンドでインストールできなかったので

pip install seaborn

でインストールしました。

そして、ハローワールド的にバージョン情報の表示、以下のソースを実行 ※チュートリアルのページからコピーできるやつ!

from __future__ import absolute_import, division, print_function

import pathlib

import pandas as pd
import seaborn as sns

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

print(tf.__version__)

この後のコードも同様にコピペでいけます。ただし、tail()はprintしないと表示しないようです。

print(dataset.tail())

そして、下のグラフの表示に関しても同様で下のコードを追加してやる必要がありました。

import matplotlib.pyplot as plt
・
・
・
plt.show()

<実行結果>

<全体的な統計の出力結果>

# 初めの表
      MPG  Cylinders  Displacement  ...    USA  Europe  Japan
393  27.0          4         140.0  ...    1.0     0.0    0.0
394  44.0          4          97.0  ...    0.0     1.0    0.0
395  32.0          4         135.0  ...    1.0     0.0    0.0
396  28.0          4         120.0  ...    1.0     0.0    0.0
397  31.0          4         119.0  ...    1.0     0.0    0.0

[5 rows x 10 columns]

# 全体的な統計の出力結果
              count         mean         std   ...       50%      75%     max
Cylinders     314.0     5.477707    1.699788   ...       4.0     8.00     8.0
Displacement  314.0   195.318471  104.331589   ...     151.0   265.75   455.0
Horsepower    314.0   104.869427   38.096214   ...      94.5   128.00   225.0
Weight        314.0  2990.251592  843.898596   ...    2822.5  3608.00  5140.0
Acceleration  314.0    15.559236    2.789230   ...      15.5    17.20    24.8
Model Year    314.0    75.898089    3.675642   ...      76.0    79.00    82.0
USA           314.0     0.624204    0.485101   ...       1.0     1.00     1.0
Europe        314.0     0.178344    0.383413   ...       0.0     0.00     1.0
Japan         314.0     0.197452    0.398712   ...       0.0     0.00     1.0

[9 rows x 8 columns]

引き続きコピペでプログラムを組んでいきます。下は実行結果
.summaryメソッドを使用してモデルの簡単な説明を印刷する

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 64)                640       
_________________________________________________________________
dense_1 (Dense)              (None, 64)                4160      
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 65        
=================================================================
Total params: 4,865
Trainable params: 4,865
Non-trainable params: 0
_________________________________________________________________

それではモデルを試してみてください。10トレーニングデータから試験のバッチを取り、model.predictそれを呼び出します。

<実行結果>

array([[0.08682194]、
       [0.0385334]、
       [0.11662665]、
       [ -  0.22370592]、
       [0.1239757]、
       [0.1349103]、
       [0.41427213]、
       [0.19710071]、
       [0.01540279 
       ]、dtype = float32)

しかし、NumPyが出力されてもよくわからん。。。と言うのは前回と同じです。

モデルを訓練する

ここもやっぱりコピペでプログラムを書きます。最後に以下のコードを追加してください。

plt.show()

<実行結果>

自動的にトレーニングを停止するようにメソッドを更新

微妙な差分ですが。。。その良し悪しは「あなた次第」らしいです。

モデルがどのように機能したのか?

これまでと同様にコピペでコードを追加します。実行結果です。

Testing set Mean Abs Error:  2.03 MPG

テストの平均誤差が「2.03MPG」ある。。。

予測を行う

ここもやっぱりコピペで下が実行結果、参考サイトと違う結果になりました。どこかが間違っているように思える。。。

 

ソースを見直しました。グラフ表示の設定がまずかったようです。初めの方にある「plot_history(history)」をコメントアウトしました。

結論

「データセットの用意→モデル作成→トレーニング→予測」を行いその結果に対してどのような判断をするか?

 

でも、前提になるこれらの処理の結果がなんなのか?を理解しないと今までやってきたことも水の泡になりそうです(笑)







TensorFlow Keras 実行結果〜テキストの分類〜

イントロダクション

下のページでの学習処理の実行結果を表示します。※わかりづらいので分けました。

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, None, 16)          160000    
_________________________________________________________________
global_average_pooling1d (Gl (None, 16)                0         
_________________________________________________________________
dense (Dense)                (None, 16)                272       
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 17        
=================================================================
Total params: 160,289
Trainable params: 160,289
Non-trainable params: 0
_________________________________________________________________
Train on 15000 samples, validate on 10000 samples
Epoch 1/40
15000/15000 [==============================] - 1s 86us/step - loss: 0.6917 - acc: 0.5697 - val_loss: 0.6895 - val_acc: 0.6231
Epoch 2/40
15000/15000 [==============================] - 1s 55us/step - loss: 0.6849 - acc: 0.7046 - val_loss: 0.6800 - val_acc: 0.7423
Epoch 3/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.6701 - acc: 0.7631 - val_loss: 0.6614 - val_acc: 0.7574
Epoch 4/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.6441 - acc: 0.7736 - val_loss: 0.6330 - val_acc: 0.7681
Epoch 5/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.6068 - acc: 0.7985 - val_loss: 0.5935 - val_acc: 0.7907
Epoch 6/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.5607 - acc: 0.8163 - val_loss: 0.5495 - val_acc: 0.8059
Epoch 7/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.5106 - acc: 0.8359 - val_loss: 0.5043 - val_acc: 0.8228
Epoch 8/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.4616 - acc: 0.8520 - val_loss: 0.4619 - val_acc: 0.8381
Epoch 9/40
15000/15000 [==============================] - 1s 53us/step - loss: 0.4173 - acc: 0.8644 - val_loss: 0.4254 - val_acc: 0.8460
Epoch 10/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.3787 - acc: 0.8781 - val_loss: 0.3958 - val_acc: 0.8550
Epoch 11/40
15000/15000 [==============================] - 1s 55us/step - loss: 0.3471 - acc: 0.8847 - val_loss: 0.3745 - val_acc: 0.8595
Epoch 12/40
15000/15000 [==============================] - 1s 55us/step - loss: 0.3215 - acc: 0.8910 - val_loss: 0.3537 - val_acc: 0.8666
Epoch 13/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.2982 - acc: 0.8993 - val_loss: 0.3397 - val_acc: 0.8710
Epoch 14/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.2790 - acc: 0.9049 - val_loss: 0.3273 - val_acc: 0.8743
Epoch 15/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.2625 - acc: 0.9095 - val_loss: 0.3180 - val_acc: 0.8771
Epoch 16/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.2484 - acc: 0.9132 - val_loss: 0.3103 - val_acc: 0.8788
Epoch 17/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.2346 - acc: 0.9191 - val_loss: 0.3041 - val_acc: 0.8797
Epoch 18/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.2227 - acc: 0.9236 - val_loss: 0.2990 - val_acc: 0.8817
Epoch 19/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.2115 - acc: 0.9274 - val_loss: 0.2951 - val_acc: 0.8827
Epoch 20/40
15000/15000 [==============================] - 1s 59us/step - loss: 0.2017 - acc: 0.9315 - val_loss: 0.2917 - val_acc: 0.8839
Epoch 21/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1922 - acc: 0.9345 - val_loss: 0.2892 - val_acc: 0.8841
Epoch 22/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1834 - acc: 0.9391 - val_loss: 0.2876 - val_acc: 0.8849
Epoch 23/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1754 - acc: 0.9426 - val_loss: 0.2868 - val_acc: 0.8851
Epoch 24/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1674 - acc: 0.9464 - val_loss: 0.2854 - val_acc: 0.8846
Epoch 25/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1604 - acc: 0.9493 - val_loss: 0.2850 - val_acc: 0.8855
Epoch 26/40
15000/15000 [==============================] - 1s 53us/step - loss: 0.1533 - acc: 0.9521 - val_loss: 0.2855 - val_acc: 0.8868
Epoch 27/40
15000/15000 [==============================] - 1s 53us/step - loss: 0.1474 - acc: 0.9545 - val_loss: 0.2864 - val_acc: 0.8855
Epoch 28/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1412 - acc: 0.9575 - val_loss: 0.2865 - val_acc: 0.8866
Epoch 29/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1355 - acc: 0.9583 - val_loss: 0.2874 - val_acc: 0.8874
Epoch 30/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1305 - acc: 0.9612 - val_loss: 0.2890 - val_acc: 0.8867
Epoch 31/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1245 - acc: 0.9632 - val_loss: 0.2908 - val_acc: 0.8874
Epoch 32/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1199 - acc: 0.9657 - val_loss: 0.2930 - val_acc: 0.8852
Epoch 33/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1145 - acc: 0.9677 - val_loss: 0.2952 - val_acc: 0.8854
Epoch 34/40
15000/15000 [==============================] - 1s 60us/step - loss: 0.1101 - acc: 0.9689 - val_loss: 0.2982 - val_acc: 0.8855
Epoch 35/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.1061 - acc: 0.9708 - val_loss: 0.3001 - val_acc: 0.8851
Epoch 36/40
15000/15000 [==============================] - 1s 56us/step - loss: 0.1013 - acc: 0.9726 - val_loss: 0.3034 - val_acc: 0.8836
Epoch 37/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.0975 - acc: 0.9739 - val_loss: 0.3065 - val_acc: 0.8838
Epoch 38/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.0940 - acc: 0.9739 - val_loss: 0.3103 - val_acc: 0.8830
Epoch 39/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.0898 - acc: 0.9767 - val_loss: 0.3129 - val_acc: 0.8837
Epoch 40/40
15000/15000 [==============================] - 1s 54us/step - loss: 0.0861 - acc: 0.9785 - val_loss: 0.3167 - val_acc: 0.8816
25000/25000 [==============================] - 1s 30us/step
[0.3381449136734009, 0.872]

[0.3381449136734009, 0.872]※「赤字の部分 * 100」=パーセンテージ


関連ページ一覧

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

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)

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


Python Tensorflow 〜初めての人工知能〜

イントロダクション

今流行りのAIについて調べてみたものの、全くわからなかったのですが。このまま引き下がるのも男がすたる。。。※本当は必要になってきたので。。。

Pythonで学習開始します。使用できる言語は以下

  1. Java: 全てを網羅(バンドル)できていないようです。が使用可能
  2. Go: 同上
  3. C: 注意書きなし→問題なく使える
  4. Python: 注意書きなし
  5. JavaScript
  6. Swift

いろんな言語で使用できるようです。しかしここはPythonで行きます。

インストールTensorFlow

ここのサイトを見て行います。※Macへのインストールです。

1. virtualenvをインストールする

$pip3 install -U virtualenv

pythonがインストールしていない場合は以下のコマンドでインストール

brew update brew install python3  # Python 3

同様にHOME_BREWがインストールされていない場合

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

2.virtualenvを作成する

virtualenvを作成するディレクトリに移動

mkdir ./venv

virtualenvを作成する

virtualenv --system-site-packages -p python3 ./venv

./venv/bin/activeを起動する

source ./venv/bin/active

virtualenvを終了する

deactivate

virtualenv上でtensorflowをインストールする

pip3 install --upgrade --ignore-installed https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl

引数にURLを入力しています、URLの赤い字の部分にバージョン番号をセットしてインストールします。

https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.8.0-py3-none-any.whl

そして、インストール完了確認

python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"

このままコピペでコンソールに入力してやります。実行結果は以下です。

(venv) takuminoMacBook-Pro:venv takk$ python3
Python 3.7.1 (default, Nov  6 2018, 18:49:54) 
[Clang 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
/Users/takk/WebPage/minim_server/python/venv/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.6 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.7
  return f(*args, **kwds)
>>> exit()


関連ページ一覧

  1. Tensorflow Keras〜初めのトレーニング_1〜
  2. Tensorflow Keras〜初めのトレーニング_2:前処理〜
  3. TensorFlow Keras〜テキストの分類〜
  4. TensorFlow Keras〜回帰、準備から予測まで〜