トップページ人工知能,実世界DB人工知能による分類 (classification)ディープラーニングによるデータの分類(学習では TensorFlow データセットのIris データセットを使用)(Google Colab 上もしくはパソコン上)

ディープラーニングによるデータの分類(学習では TensorFlow データセットのIris データセットを使用)(Google Colab 上もしくはパソコン上)

ニューラルネットワークによるデータの分類を行う. ここでの分類は,データから,そのラベル(クラス名)を求めるもの. 分類のために,教師データを用いてニューラルネットワークの学習を行う.

このページでは,TensorFlow データセットの中の Iris データセットを用いて,TensorFlow での学習を行うととも に,データの分類も行う. データセットの利用条件は利用者で確認すること. このページの内容は, https://www.tensorflow.org/datasets/keras_example による.

【サイト内の関連ページ】

参考 Web ページ

Google Colab へのリンク

このページの内容は,Google Colaboratory でも実行できる.

そのために,次の URL で,Google Colaboratory のノートブックを準備している.

次のリンクをクリックすると,Google Colaboratoryノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコードを実行することができる.Google Colaboratory のノートブックは書き換えて使うこともできる.このとき,書き換え後のものを,各自の Google ドライブ内に保存することもできる.

https://colab.research.google.com/drive/1KAdXrTgUOo1TFqAmrHlKTZd3EFSBEZYU?usp=sharing

(1) 前準備(Google Colaboratory のノートブックを新規作成して使う場合)

自分で,Google Colaboratory のノートブックを新規作成する場合(上のリンクを使わない)のため,手順を説明する.

パソコンを使う場合は,下に「前準備(パソコンを使う場合)」で説明している.

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

    https://colab.research.google.com

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

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

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

    [image]

    [image]

(2) (自分のパソコンで Python を動かす場合)Python の準備

Python のインストール,pip と setuptools の更新,Python 開発環境

Python の URL: http://www.python.org/

【Python, pip の使い方】

Python, pip は,次のコマンドで起動できる.

Python 開発環境のインストール】

TensorFlow,tensorflow_datasets,numpy,matplotlib, seaborn, scikit-learn のインストール

Iris データセットのロードと確認

  1. パッケージのインポート,TensorFlow のバージョン確認など
    from __future__ import absolute_import, division, print_function, unicode_literals
    import tensorflow.compat.v2 as tf
    tf.enable_v2_behavior()
    from tensorflow.keras import backend as K 
    K.clear_session()
    print(tf.__version__)
    import numpy as np
    import tensorflow_datasets as tfds
    
    from tensorflow.keras.preprocessing import image
    %matplotlib inline
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    

    [image]
  2. Iris データセットのロード

    「0%:50%」は先頭から 50 %, 「50%:100%」は末尾の 50% 部分.

    iris, iris_metadata = tfds.load('iris', split=['train[0%:50%]', 'train[50%:100%]'], with_info = True, shuffle_files=True, as_supervised=True, batch_size = -1)
    x_train, y_train, x_test, y_test = iris[0][0], iris[0][1], iris[1][0], iris[1][1]
    print(iris_metadata)
    

    [image]
  3. 型と形と最大値と最小値の確認
    print(type(x_train), x_train.shape, np.max(x_train), np.min(x_train))
    print(type(x_test), x_test.shape, np.max(x_test), np.min(x_test))
    print(type(y_train), y_train.shape, np.max(y_train), np.min(y_train))
    print(type(y_test), y_test.shape, np.max(y_test), np.min(y_test))
    

    [image]

ディープラーニングの実行

  1. データセットの情報を表示
    print(iris_metadata)
    print(iris_metadata.features["label"].num_classes)
    print(iris_metadata.features["label"].names)
    

    [image]
  2. 主成分分析の結果である主成分スコアのプロット

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

    import pandas as pd
    import seaborn as sns
    sns.set()
    import sklearn.decomposition
    # 主成分分析
    def prin(A, n):
        pca = sklearn.decomposition.PCA(n_components=n)
        return pca.fit_transform(A)
    
    # 主成分分析で2つの成分を得る
    def prin2(A):
        return prin(A, 2)
    
    # M の最初の2列を,b で色を付けてプロット
    def scatter_plot(M, b, alpha):
        a12 = pd.DataFrame( M[:,0:2], columns=['a1', 'a2'] )
        a12['target'] = b
        sns.scatterplot(x='a1', y='a2', hue='target', data=a12, palette=sns.color_palette("hls", np.max(b) + 1), legend="full", alpha=alpha)
    
    # 主成分分析プロット
    def pcaplot(A, b, alpha):
        scatter_plot(prin2(A), b, alpha)
    
    pcaplot(np.reshape(x_train, (x_train.shape[0], -1)), y_train, 0.5)
    

    [image]
    p
    pcaplot(np.reshape(x_test, (x_test.shape[0], -1)), y_test, 0.5)
    

    [image]
  3. x_train, x_test, y_train, y_test の numpy ndarray への変換
    x_train = x_train.numpy()
    x_test = x_test.numpy()
    y_train = y_train.numpy()
    y_test = y_test.numpy()
    print(type(x_train), x_train.shape, np.max(x_train), np.min(x_train))
    print(type(x_test), x_test.shape, np.max(x_test), np.min(x_test))
    print(type(y_train), y_train.shape, np.max(y_train), np.min(y_train))
    print(type(y_test), y_test.shape, np.max(y_test), np.min(y_test))
    

    [image]
  4. ニューラルネットワークの作成と確認とコンパイル

    最適化器(オプティマイザ)損失関数とメトリクスを設定する.

    SGD を使う場合のプログラム例

    NUM_CLASSES = 3
    
    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Dense(units=64, input_dim=4, activation='relu'))
    m.add(tf.keras.layers.Dropout(rate=0.5))
    m.add(tf.keras.layers.Dense(units=NUM_CLASSES, activation='softmax'))
    m.compile(optimizer=tf.keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
    

    [image]

    ADAM を使う場合のプログラム例

    NUM_CLASSES = 3
    
    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Dense(units=64, input_dim=4, activation='relu'))
    m.add(tf.keras.layers.Dropout(rate=0.5))
    m.add(tf.keras.layers.Dense(units=NUM_CLASSES, activation='softmax'))
    m.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),,
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    
  5. ニューラルネットワークの確認表示
    print(m.summary())
    

    [image]
  6. ニューラルネットワークの学習を行う

    ニューラルネットワーク学習は fit メソッドにより行う. 教師データを使用する.

    EPOCHS = 50
    history = m.fit(x_train, y_train, validation_data=(x_test, y_test), verbose=2, epochs=EPOCHS)
    

    [image]
  7. ディープラーニングによるデータの分類

    x_test を分類してみる.

    print(m.predict(x_test))
    

    [image]

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

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

    [image]

    y_test (正解)を表示

    print(y_test)
    

    [image]
  8. 学習曲線の確認

    過学習や学習不足について確認.

    import pandas as pd
    hist = pd.DataFrame(history.history)
    hist['epoch'] = history.epoch
    print(hist)
    

    [image]
  9. 学習曲線のプロット

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