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

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

CIFAR 10 データセット下図)の画像分類を行う. 所定の 10種類に画像分類を行うものである. その 10種類は,airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck である.

[image]

ニューラルネットワークの作成,学習,データの分類を行う. TensorFlow データセットCIFAR 10 データセットを使用する.

ここで行うこと

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

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

参考Webページ:

Google Colab へのリンク

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

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

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

https://colab.research.google.com/drive/1isb39RL7JtTdHaLQfp3cC8vMVd7OXbiV?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 のインストール

CIFAR 10 データセットのロード

  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. CIFAR 10 データセットのロード
    • x_train: サイズ 32 ×32 の 60000枚の濃淡画像
    • y_train: 50000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)
    • x_test: サイズ 32 ×32 の 10000枚の濃淡画像
    • y_test: 10000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)
    tensorflow_datasets の loadで, 「batch_size = -1」を指定して,一括読み込みを行っている.
    cifar10, cifar10_metadata = tfds.load('cifar10', with_info = True, shuffle_files=True, as_supervised=True, batch_size = -1)
    x_train, y_train, x_test, y_test = cifar10['train'][0], cifar10['train'][1], cifar10['test'][0], cifar10['test'][1]
    print(cifar10_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]
  4. データセットの中の画像を表示

    MatplotLib を用いて,0 番目の画像を表示する

    NUM = 0
    plt.figure()
    plt.imshow(x_train[NUM])
    plt.colorbar()
    plt.gca().grid(False)
    plt.show()
    

    [image]

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

  1. データセットの情報を表示
    print(cifar10_metadata)
    print(cifar10_metadata.features["label"].num_classes)
    print(cifar10_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.1)
    

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

    [image]
  3. x_train, x_test, y_train, y_test の numpy ndarray への変換と,値の範囲の調整(値の範囲が 0 〜 255 であるのを,0 〜 1 に調整)
    x_train = x_train.numpy().astype("float32") / 255.0
    x_test = x_test.numpy().astype("float32") / 255.0
    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. データの確認表示

    MatplotLib を用いて,複数の画像を並べて表示する.

    plt.style.use('default')
    plt.figure(figsize=(10,10))
    for i in range(25):
      plt.subplot(5,5,i+1)
      plt.xticks([])
      plt.yticks([])
      plt.grid(False)
      plt.imshow(x_train[i], cmap=plt.cm.binary)
      plt.xlabel(y_train[i])
    
    plt.show()
    

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

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

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

    NUM_CLASSES = 10
    
    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Flatten(input_shape=(32, 32, 3)))
    m.add(tf.keras.layers.Dense(units=1024, 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'])
    

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

    [image]
  7. モデルのビジュアライズ

    Keras のモデルのビジュアライズについては: https://keras.io/ja/visualization/

    ここでの表示で,エラーメッセージが出る場合でも,モデル自体は問題なくできていると考えられる.続行する

    from tensorflow.keras.utils import plot_model
    import pydot
    plot_model(m)
    

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

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

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

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

    x_test を分類してみる.

    print(m.predict(x_test))
    

    [image]

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

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

    [image]

    y_test 内にある正解のラベル(クラス名)を表示する(上の結果と比べるため)

    print(y_test[1])
    

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

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

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

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

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