トップページ -> データベース関連技術 -> Keras の体験,応用例 -> TensorFlow, Keras で Iris データを扱う(Google Colab を利用)
[サイトマップへ], [サイト内検索へ]

TensorFlow, Keras で Iris データを扱う(Google Colab を利用)

ニューラルネットワークの作成,訓練(学習),予測を行う. Iris データを使用する.

ここで行うこと

説明資料: [パワーポイント]

サイト内の関連ページ


MNIST データセットを用いた学習と予測

  1. Google Colab のWebページを開く

    https://colab.research.google.com

    Google Colab はオンラインの Python 開発環境. 使用するには Google アカウントが必要

  2. ファイル」で、「PYTHON 3 の新しいノートブックの新規作成」を選ぶ

    [image]
  3. Google アカウントでのログインが求められたときはログインする

    [image]

    [image]
  4. パッケージのインポートと TenforFlow のバージョン確認
    from __future__ import absolute_import, division, print_function, unicode_literals
    import tensorflow.compat.v2 as tf
    import tensorflow_datasets as tfds
    import numpy as np
    import matplotlib.pyplot as plt
    tf.enable_v2_behavior()
    
    print(tf.__version__)
    

    [image]
  5. iris データ(scikit-learn 同封のもの)の準備

    iris データの先頭部分

    [image]
  6. Iris データの準備

    x, yiris データを設定

    次の Python プログラムを実行

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

    [image]
  7. iris データについて,配列の形,次元数,データの中身を確認

    X は外花被片、内花被片の幅と高さである

    print( x.shape )
    print( x.ndim )
    print( x )
    

    配列(アレイ)の形:サイズは 150 × 4.次元数は 2

    [image]

    y は花の種類のデータである

    print( y.shape )
    print( y.ndim )
    print( y )
    

    配列(アレイ)の形:サイズは 150.次元数は 1

    [image]
  8. ニューラルネットワークを使うために,データを調整

    x_train, y_train, x_test, y_test に iris データを設定し,正規化

    import sklearn.model_selection
    x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x, y, train_size=0.5) 
    # 2次元の配列. 要素は float64, 最大値と最小値を用いて正規化
    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)
    

    [image]
  9. x_train, y_train の確認
    print(x_train)
    print(y_train)
    

    [image]

    [image]
  10. ニューラルネットワークの作成
    • ニューラルネットワークの種類: 層構造 (Sequential Model)
    • ニューラルネットワークの構成
      • 入力の次元数: 4
      • 入力層のユニット(ニューロン)の個数: 64(1層)
      • 出力層のユニット(ニューロン)の個数: 3
      • 出力層のユニット(ニューロン)の種類: softmax (活性化するのは一度に1つ)
    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Dense(units=64, input_dim=4, activation=tf.nn.relu))
    m.add(tf.keras.layers.Dropout(rate=0.2))
    m.add(tf.keras.layers.Dense(units=3, activation=tf.nn.softmax))
    m.compile(optimizer=tf.keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True),
              loss='sparse_categorical_crossentropy')
    

    [image]
  11. ニューラルネットワークの確認表示
    print(m.summary())
    

    [image]
  12. モデルの可視化

    参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/

    from IPython.display import SVG
    
    SVG(tf.keras.utils.model_to_dot(m).create(prog='dot', format='svg'))
    

    [image]
  13. ニューラルネットワークの訓練(学習)を行う
    history = m.fit(x_train, y_train, epochs=50)
    

    [image]
  14. テスト用データセットで評価する

    ※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.

    print( m.evaluate(x_test, y_test, verbose=2) )
    

    [image]
  15. ニューラルネットワークを使ってみる

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

    ※ 予測させたいデータx_test は、Xの中からランダムに選ばれていたので、実行結果は下の図と違うものになる

    predictions = m.predict(x_test)
    print(predictions)
    

    [image]

    それぞれ、3つの数値の中で、一番大きいものはどれか?

    m.predict(x_test).argmax(axis=1)
    

    [image]

    正解と比べてみる

    print(y_test)
    

    [image]
  16. 訓練の履歴の可視化

    参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/

    訓練時の損失

    import matplotlib.pyplot as plt
    
    loss = history.history['loss']
    epochs = range(1, len(loss) + 1)
    
    # "bo" は青いドット
    plt.plot(epochs, loss, 'bo', label='Training loss')
    plt.title('Training loss')
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend()
    
    plt.show()
    

    [image]
  17. 別のニューラルネットワークを作成してみる
    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Dense(units=64, input_dim=4, activation=tf.nn.relu))
    m.add(tf.keras.layers.Dropout(rate=0.2))
    m.add(tf.keras.layers.Dense(units=3, activation=tf.nn.softmax))
    m.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    print(m.summary())
    history = m.fit(x_train, y_train, epochs=50)
    print( m.evaluate(x_test, y_test, verbose=2) )
    import matplotlib.pyplot as plt
    
    loss = history.history['loss']
    epochs = range(1, len(loss) + 1)
    
    # "bo" は青いドット
    plt.plot(epochs, loss, 'bo', label='Training loss')
    plt.title('Training loss')
    plt.xlabel('Epochs')
    plt.ylabel('Loss')
    plt.legend()
    
    plt.show()
    

    [image]

    本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

    問い合わせ先: 金子邦彦(かねこ くにひこ) [image]