| [サイトマップへ] |
Keras は TensorFlow, CNTK, Theano 上で動くニューラルネットライブラリです.
ここで行うこと
先人に感謝.
前準備として,Python 開発環境のAnaconda のインストールが終わっていること. Windows では Chocholatey のインストールが終わっていること
Windows での 手順は、 「Windows で,隔離された Python 環境 + Keras + TensorFlow + OpenCV + spyder + Dlib 環境を作る(Anaconda を利用)」のページで説明しています.
以下,Windows での Anaconda をインストール済み, 隔離された Python 環境(名前は ai)に、Tensorflow, Keras, OpenCV, spyder をインストール済みであるものとして説明を続けます.
iris データの先頭部分
Windows では、Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.
※ Windows で、あるPython 環境(名前は aiとする)の spyder を使いたいとき:
次の Python プログラムを実行
import sklearn.datasets iris = sklearn.datasets.load_iris() X = iris.data y = iris.target
実習課題
iris データについて,配列の形,次元数,データの中身を,次のプログラムで確認しなさい.
X は外花被片、内花被片の幅と高さである
print( X.shape ) print( X.ndim ) print( X )
配列(アレイ)の形:サイズは 150 × 4.次元数は 2.
y は花の種類のデータである
print( y.shape ) print( y.ndim ) print( y )
配列(アレイ)の形:サイズは 150.次元数は 1.
「主成分分析」を用いて、X のサイズ 150 × 4 を、 150 × 2 に変換. そして、150 個の点としてプロット
import pandas as pd
import seaborn
import sklearn.decomposition
import matplotlib.pyplot as plt
# 主成分分析で第2次元のサイズを2に
def prin2(A):
pca = sklearn.decomposition.PCA(n_components=2)
pca.fit(A)
return pca.fit_transform(A)
plt.scatter(prin2(X)[:,0], prin2(X)[:,1])
y を使って、点に色を付ける
import pandas as pd
import seaborn
import sklearn.decomposition
import matplotlib.pyplot as plt
# 主成分分析で第2次元のサイズを2に
def prin2(A):
pca = sklearn.decomposition.PCA(n_components=2)
pca.fit(A)
return pca.fit_transform(A)
def scatter_color(A2, b, alpha):
a12 = pd.DataFrame( A2, columns=['a1', 'a2'] )
a12['target'] = b
seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
scatter_color(prin2(X), y, 1)
参考Webページ: 「https://keras.io/ja/」の「30 秒で Keras に入門しましょう」
Windows では、Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.
次の Python プログラムを実行
※ 前に出たプログラムと同じ
import sklearn.datasets iris = sklearn.datasets.load_iris() X = iris.data y = iris.target
次の Python プログラムを実行
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, train_size=0.5)
# 2次元の配列. 要素は float64, 最大値と最小値を用いて正規化
import numpy as np
import keras
def normalizer(A):
M = np.reshape(A, (len(A), -1))
M = M.astype('float32')
max = M.max(axis=0)
min = M.min(axis=0)
return (M - min)/(max - min)
X_train = normalizer(X_train)
X_test = normalizer(X_test)
y_train_logit = keras.utils.to_categorical(y_train)
y_test_logit = keras.utils.to_categorical(y_test)
y_train, y_test を使って、点に色を付ける
先ほどと同じ散布図が得られるはずである
import pandas as pd
import seaborn
import sklearn.decomposition
import matplotlib.pyplot as plt
# 主成分分析で第2次元のサイズを2に
def prin2(A):
pca = sklearn.decomposition.PCA(n_components=2)
pca.fit(A)
return pca.fit_transform(A)
def scatter_color(A2, b, alpha):
a12 = pd.DataFrame( A2, columns=['a1', 'a2'] )
a12['target'] = b
seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
scatter_color(prin2(np.concatenate( (X_train, X_test) )), np.concatenate( (y_train, y_test) ), 1)
損失関数: categorical crossentropy, 最適化法: 確率的勾配降下法 (SGD), 尺度; accuracy
次の Python プログラムを実行
import tensorflow as tf
import keras
from keras.models import Sequential
m = Sequential()
from keras.layers import Dense, Activation
m.add(Dense(units=64, input_dim=len(X_train[0])))
m.add(Activation('relu'))
m.add(Dense(units=max(set(y_train)) - min(set(y_train)) + 1))
m.add(Activation('softmax'))
m.compile(loss='sparse_categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
m.fit(X_train, y_train, epochs=200)
予測を行わせたいデータは、X_test である
m.predict(X_test)
予測の正しさを検証するために y_test を使う。Keras の機能 evaluate を使う
score=m.evaluate(X_test, y_test, batch_size=1) print(score)
「optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True」のところが、変更されたところ
import tensorflow as tf
import keras
from keras.models import Sequential
m = Sequential()
from keras.layers import Dense, Activation
m.add(Dense(units=64, input_dim=len(X_train[0])))
m.add(Activation('relu'))
m.add(Dense(units=max(set(y_train)) - min(set(y_train)) + 1))
m.add(Activation('softmax'))
m.compile(loss='sparse_categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
m.compile(loss=keras.losses.sparse_categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
m.fit(X_train, y_train, epochs=200)
m.predict(X_test)
score2=m.evaluate(X_test, y_test, batch_size=1)
print(score2)