トップページ -> データベース研究スタート -> Keras 2 の利用 -> Keras を使ってみる
[サイトマップへ]  

Keras を使ってみる

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

このWebページの前半では Keras のインストール手順を、後半では、次のデータを使っての実行の手順を示します。

先人に感謝.

キーワード: Keras 2, Python, Windows インストール


前もって準備しておくこと

前準備として,Anaconda のインストールが終わっていること. 手順を下に説明しています.

Anaconda のインストール

Python 3 の開発環境である Anacondaをおすすめ.Window でのインストール手順は次の通りです(Linuxでも同様の手順です).

  1. https://www.continuum.io/downloads#windowsを開く

  2. Download」をクリックする.

  3. ダウンロードが始まるので確認する.

  4. ダウンロードした .exe ファイルを実行して,Anacondaをインストール.

    Python処理系にはいくつかの種類がある. この Web ページでは Anaconda をおすすめしている. 以下,Windows に Anacondaをインストールしたものとして説明を続ける.

  5. Windows で,コマンドプロンプトを管理者として実行

    ※ Linux の場合には,端末を開く(pyenvを使っているときは pip の実行に管理者権限を必要としない)

  6. まずは,最新の conda-build パッケージが欲しい.今のコマンドプロンプトで,次のコマンドを実行

    conda install -y conda-build
    

    ※ 「Proceed ([y]/n)?」と表示されたら, y + Enter で続行する.「反応が遅いなあ」と思ったら、Enter キーを押してみる.

  7. conda が更新されたので,コマンドプロンプトをいったん閉じる

  8. 再び,コマンドプロンプトを管理者として実行

  9. コマンドプロンプトで,次のコマンドを実行

    conda update -y pip
    conda update -y setuptools
    conda update -y conda
    conda update -y conda-build
    

    ※ 「Proceed ([y]/n)?」と表示されたら, y + Enter で続行する.「反応が遅いなあ」と思ったら、Enter キーを押してみる.


Keras 2 と前提となる Python パッケージのインストール手順

  1. コマンドプロンプトを管理者として実行

  2. Anaconda プロンプトで,次のコマンドを実行

    ※ Anaconda や Miniconda を使っていないときは conda コマンドがないので pip コマンドを使ってください

    ※ conda パッケージの tensorflow が古いので(2018/02時点),pip を使うことにする.

    conda install numpy scipy 
    conda install yaml 
    conda install hdf5 
    conda install h5py
    conda --upgrade all
    pip install --ignore-installed --upgrade tensorflow 
    pip install --ignore-installed --upgrade keras 
    

    ※ 「Proceed ([y]/n)?」と表示されたら, y + Enter で続行する.「反応が遅いなあ」と思ったら、Enter キーを押してみる.

  3. Keras がインストールできたかの確認したい。

    Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

    次の Python プログラムを実行してみる.

    エラーメッセージが出なければ OK。

    import tensorflow as tf 
    import keras 
    from keras.models import Sequential
    model = Sequential()
    
    from keras.layers import Dense, Activation
    import keras.optimizers
    model.add(Dense(units=64, input_dim=100))
    model.add(Activation('relu'))
    model.add(Dense(units=10))
    model.add(Activation('softmax'))
    model.compile(loss=keras.losses.categorical_crossentropy,
                  optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
    

Keras 2 を使ってみる

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

iris データセットを使ってみる

Python 処理系」で次を実行.(Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.)

  1. X, yiris データを設定

    次の Python プログラムを実行

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

  2. X_train, y_train, X_test, y_test の確認表示

    X_train, X_test は主成分分析で2次元にマッピング, y_train, y_test は色.

    import pandas as pd
    import seaborn 
    import sklearn.decomposition
    # 主成分分析でプロット
    def pcaplot(A, b, alpha):
        pca = sklearn.decomposition.PCA(n_components=2)
        pca.fit(A)
        a12 = pd.DataFrame( pca.fit_transform(A), columns=['a1', 'a2'] )
        a12['target'] = b
        seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
    pcaplot(X, y, 1)
    

  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
    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 の確認表示
    pcaplot(np.concatenate( (X_train, X_test) ), np.concatenate( (y_train, y_test) ), 1)
    

  5. モデルの生成と,モデルを用いた予測

    次の Python プログラムを実行

    from keras.models import Sequential
    model = Sequential()
    from keras.layers import Dense, Activation
    
    model.add(Dense(units=64, input_dim=len(X_train[0])))
    model.add(Activation('relu'))
    model.add(Dense(units=max(set(y_train)) - min(set(y_train)) + 1))
    model.add(Activation('softmax'))
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer='sgd',
                  metrics=['accuracy'])
    model.fit(X_train, y_train, epochs=200)
    score=model.evaluate(X_test, y_test, batch_size=1)
    print(score)
    model.predict(X_test)
    
    from keras.models import Sequential
    model2 = Sequential()
    from keras.layers import Dense, Activation
    import keras.losses
    
    model2.add(Dense(units=64, input_dim=len(X_train[0])))
    model2.add(Activation('relu'))
    model2.add(Dense(units=max(set(y_train)) - min(set(y_train)) + 1))
    model2.add(Activation('softmax'))
    model2.compile(loss=keras.losses.sparse_categorical_crossentropy,
                  optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
    model2.fit(X_train, y_train, epochs=200)
    score2=model2.evaluate(X_test, y_test, batch_size=1)
    print(score2)
    model2.predict(X_test)
    

以下、書きかけ

CIFAR10

keras に付属のデータセットに関する Web ページ: https://keras.io/ja/datasets/

  1. X_train, y_train, X_test, y_testCIFAR 10 データを設定

    次の Python プログラムを実行

    from keras.datasets import cifar10
    (X_train, y_train), (X_test, y_test) = cifar10.load_data()
    
    import numpy as np
    # 2次元の配列. 要素は float32, 最大値と最小値を用いて正規化
    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)
    

  2. X_train, y_train, X_test, y_test の確認表示

    X_train, X_test は主成分分析で2次元にマッピング, y_train, y_test は色.

    import pandas as pd
    import seaborn 
    import sklearn.decomposition
    
    # 主成分分析でプロット
    def pcaplot(A, b, alpha):
        pca = sklearn.decomposition.PCA(n_components=2)
        pca.fit(A)
        a12 = pd.DataFrame( pca.fit_transform(A), columns=['a1', 'a2'] )
        a12['target'] = b
        seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
    pcaplot(np.concatenate( (X_train, X_test) ), np.concatenate( (y_train, y_test) ), 0.1)
    

CIFAR100

keras に付属のデータセットに関する Web ページ: https://keras.io/ja/datasets/

  1. X_train, y_train, X_test, y_testCIFAR 100 データを設定

    次の Python プログラムを実行

    from keras.datasets import cifar100
    (X_train, y_train), (X_test, y_test) = cifar100.load_data(label_mode='fine')
    
    import numpy as np
    # 2次元の配列. 要素は float32, 最大値と最小値を用いて正規化
    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)
    

  2. X_train, y_train, X_test, y_test の確認表示

    X_train, X_test は主成分分析で2次元にマッピング, y_train, y_test は色.

    import pandas as pd
    import seaborn 
    import sklearn.decomposition
    
    # 主成分分析でプロット
    def pcaplot(A, b, alpha):
        pca = sklearn.decomposition.PCA(n_components=2)
        pca.fit(A)
        a12 = pd.DataFrame( pca.fit_transform(A), columns=['a1', 'a2'] )
        a12['target'] = b
        seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
    pcaplot(np.concatenate( (X_train, X_test) ), np.concatenate( (y_train, y_test) ), 0.1)
    

MNIST

keras に付属のデータセットに関する Web ページ: https://keras.io/ja/datasets/

  1. X_train, y_train, X_test, y_testMNIST データを設定

    次の Python プログラムを実行

    from keras.datasets import mnist
    (X_train, y_train), (X_test, y_test) = mnist.load_data()
    
    import numpy as np
    # 2次元の配列. 要素は float32, 最大値と最小値を用いて正規化
    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)
    

  2. X_train, y_train, X_test, y_test の確認表示

    X_train, X_test は主成分分析で2次元にマッピング, y_train, y_test は色.

    import pandas as pd
    import seaborn 
    import sklearn.decomposition
    
    # 主成分分析でプロット
    def pcaplot(A, b, alpha):
        pca = sklearn.decomposition.PCA(n_components=2)
        pca.fit(A)
        a12 = pd.DataFrame( pca.fit_transform(A), columns=['a1', 'a2'] )
        a12['target'] = b
        seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
    pcaplot(np.concatenate( (X_train, X_test) ), np.concatenate( (y_train, y_test) ), 0.1)
    

  3. モデルの生成と,モデルを用いた予測

    次の Python プログラムを実行

    from keras.models import Sequential
    model = Sequential()
    from keras.layers import Dense, Activation
    
    model.add(Dense(units=20, input_dim=len(X_train[0])))
    model.add(Activation('relu'))
    model.add(Dense(units=max(set(y_train)) - min(set(y_train)) + 1))
    model.add(Activation('softmax'))
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer='sgd',
                  metrics=['accuracy'])
    score=model.evaluate(X_test, y_test, batch_size=1)
    model.predict(X_test)
    model.fit(X_train, y_train, epochs=200)
    

Fashion MNIST

keras に付属のデータセットに関する Web ページ: https://keras.io/ja/datasets/

  1. X_train, y_train, X_test, y_testFashion MNIST データを設定

    次の Python プログラムを実行

    from keras.datasets import fashion_mnist
    (X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()
    
    import numpy as np
    # 2次元の配列. 要素は float32, 最大値と最小値を用いて正規化
    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)
    

  2. X_train, y_train, X_test, y_test の確認表示

    X_train, X_test は主成分分析で2次元にマッピング, y_train, y_test は色.

    import pandas as pd
    import seaborn 
    import sklearn.decomposition
    
    # 主成分分析でプロット
    def pcaplot(A, b, alpha):
        pca = sklearn.decomposition.PCA(n_components=2)
        pca.fit(A)
        a12 = pd.DataFrame( pca.fit_transform(A), columns=['a1', 'a2'] )
        a12['target'] = b
        seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
    pcaplot(np.concatenate( (X_train, X_test) ), np.concatenate( (y_train, y_test) ), 0.1)
    

Boston Housing Price

keras に付属のデータセットに関する Web ページ: https://keras.io/ja/datasets/

  1. X_train, y_train, X_test, y_testBoston Housing データを設定

    次の Python プログラムを実行

    from keras.datasets import boston_housing
    (X_train, y_train), (X_test, y_test) = boston_housing.load_data()
    
    import numpy as np
    # 2次元の配列. 要素は float32, 最大値と最小値を用いて正規化
    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)
    

  2. X_train, y_train, X_test, y_test の確認表示

    X_train, X_test は主成分分析で2次元にマッピング, y_train, y_test は色.

    import pandas as pd
    import seaborn 
    import sklearn.decomposition
    
    # 主成分分析でプロット
    def pcaplot(A, b, alpha):
        pca = sklearn.decomposition.PCA(n_components=2)
        pca.fit(A)
        a12 = pd.DataFrame( pca.fit_transform(A), columns=['a1', 'a2'] )
        a12['target'] = b
        seaborn.lmplot(x='a1', y='a2', data=a12, hue='target', scatter_kws={'alpha': alpha}, fit_reg=False)
    pcaplot(np.concatenate( (X_train, X_test) ), np.concatenate( (y_train, y_test) ), 0.1)
    

参考Webページ http://www.procrasist.com/entry/2017/01/07/154441

https://keras.io/getting-started/sequential-model-guide/ で言及されている次の事項について.

https://github.com/fchollet/keras/tree/master/examples に記載のプログラムを動かしてみる.

  • CIFAR 10

    https://github.com/fchollet/keras/blob/master/examples/cifar10_cnn.py を実行してみる.