トップページ -> 実践知識 -> Keras 2 の利用 -> Keras を用いたニューラルネットワークの作成,学習,予測
[サイトマップへ], サイト内検索:

Keras を用いたニューラルネットワークの作成,学習,予測

サイト構成 連絡先,業績 実践知識 コンピュータ 教材 サポートページ

Keras は TensorFlow, CNTK, Theano 上で動くニューラルネットライブラリです.

ここで行うこと

先人に感謝.


前準備

前準備として,Pythonのインストールが終わっていること.

Python のインストール

※ Python のプログラム作成には、PyCharmなどが便利である.

以下,Windows に Python, git, cmake をインストール済みであるものとして説明を続ける.

隔離された Python 環境の作成.Tensorflow, Keras, OpenCV, spyer のインストール

Windows での 手順は、 「Windows で,隔離された Python 環境 + Keras + TensorFlow + OpenCV + spyder + Dlib 環境を作る(Anaconda を利用)」のページで説明している.

以下,Windows での Anaconda をインストール済み, 隔離された Python 環境(名前は ai)に、Tensorflow, Keras, OpenCV, spyder をインストール済みであるものとして説明を続ける.


iris データ

iris データの先頭部分

  1. IPython シェルのコンソールで、Python 環境(名前は keras)を使う

    Windows では、Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.

    ※ Windows で、あるPython 環境(名前は aiとする)の spyder を使いたいとき:

  2. X, yiris データを設定

    次の 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

  3. X の確認表示

    「主成分分析」を用いて、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])
    

  4. Xy の確認表示

    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)
    


Keras 2 を使ってみる

参考Webページ: 「https://keras.io/ja/」の「30 秒で Keras に入門しましょう

  1. IPython シェルのコンソールを使う

    Windows では、Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.

  2. X, yiris データを設定

    次の Python プログラムを実行

    ※ 前に出たプログラムと同じ

    import sklearn.datasets
    iris = sklearn.datasets.load_iris()
    X = iris.data
    y = iris.target
    

  3. X_train, y_train, X_test, y_test に iris データを設定

    次の 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)
    

  4. X_train, y_train, X_test, 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)
    
    pcaplot(np.concatenate( (X_train, X_test) ), np.concatenate( (y_train, y_test) ), 1)

  5. ニューラルネットワークを作成してみる
    • ニューラルネットワークの種類: 層構造 (Sequential Model)

    • ニューラルネットワークの構成
      • 入力の次元数: 4
      • 入力層のユニット(ニューロン)の個数: 64(1層)
      • 出力層のユニット(ニューロン)の個数: 3以下 (学習データに応じて、3以下に自動調整)
      • 出力層のユニット(ニューロン)の種類: softmax (活性化するのは一度に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'])
    

  6. 今度は、X_trainy_trainを用いて、ニューラルネットワークの学習を行う
    m.fit(X_train, y_train, epochs=200)
    

  7. ニューラルネットワークによる予測を行う.

    予測を行わせたいデータは、X_test である

    m.predict(X_test)
    

  8. 予測結果を評価する

    予測の正しさを検証するために y_test を使う。Keras の機能 evaluate を使う

    score=m.evaluate(X_test, y_test, batch_size=1)
    print(score)
    

  9. 別のニューラルネットワークを作成してみる

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