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

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

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

MNIST データセット,Fashion MNIST データセットは形は同じ. データのダウンロードのときの操作が違うが,他は同じ操作になる.

目次

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

サイト内の関連ページ


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

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

    https://colab.research.google.com

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

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

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

    [image]

    [image]
  4. パッケージのインポートと TensorFlow のバージョン確認
    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. 画像データセット MNIST を準備
    tensorflow_datasets の loadで, 「batch_size = -1」を指定すると一括読み込みになる.
    mnist, metadata = tfds.load(
        name="mnist", as_supervised=False, with_info=True, batch_size = -1)
    train, test = mnist['train'], mnist['test']
    print(metadata)
    

    [image]
  6. train と test の形と次元を確認
    print(train)
    print(test)
    

    [image]
  7. データの確認表示
    plt.figure(figsize=(10,10))
    for i in range(25):
      plt.subplot(5,5,i+1)
      plt.xticks([])
      plt.yticks([])
      plt.grid(False)
      image, label = train["image"][i], train["label"][i]
      plt.imshow(image.numpy()[:, :, 0].astype(np.float32), cmap=plt.get_cmap("gray"))
      plt.xlabel(label.numpy())
    
    plt.show()
    

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

    変数 x_train: サイズ 28 × 28 の 60000枚の濃淡画像,値が 0 から 1 になるように調整

    変数 y_train: 60000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)

    変数 x_test: サイズ 28 × 28 の 10000枚の濃淡画像,値が 0 から 1 になるように調整

    変数 y_test: 10000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)

    x_train, y_train = train["image"].numpy().astype("float32") / 255.0, train["label"] 
    x_test, y_test = test["image"].numpy().astype("float32") / 255.0, test["label"]
    

    [image]
  9. ニューラルネットワークの作成
    • ニューラルネットワークの種類: 層構造 (Sequential Model)
    • ニューラルネットワークの構成
      • 入力の次元数: 28 x 28 x 1
      • 入力層のユニット(ニューロン)の個数: 128(1層)
      • 出力層のユニット(ニューロン)の個数: 10
      • 出力層のユニット(ニューロン)の種類: softmax (活性化するのは一度に1つ)

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

    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Flatten(input_shape=(28, 28, 1)))
    m.add(tf.keras.layers.Dense(units=128, activation=tf.nn.relu))
    m.add(tf.keras.layers.Dropout(rate=0.2))
    m.add(tf.keras.layers.Dense(units=10, activation=tf.nn.softmax))
    m.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    

    [image]

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

    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Flatten(input_shape=(28, 28, 1)))
    m.add(tf.keras.layers.Dense(units=128, activation=tf.nn.relu))
    m.add(tf.keras.layers.Dropout(rate=0.2))
    m.add(tf.keras.layers.Dense(units=10, activation=tf.nn.softmax))
    m.compile(optimizer=tf.keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
    
  10. ニューラルネットワークの確認表示
    print(m.summary())
    

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

    参考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]
  12. ニューラルネットワークの訓練(学習)を行う
    history = m.fit(x_train, y_train, epochs=50)
    

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

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

    print( m.evaluate(x_test, y_test) )
    

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

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

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

    predictions = m.predict( x_test )
    print( predictions[0] )
    

    [image]
  15. 正解表示

    テスト画像 0 番の正解を表示

    print( y_test[0] )
    

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

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


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

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

    https://colab.research.google.com

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

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

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

    [image]

    [image]
  4. パッケージのインポートなど
    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. 画像データセット Fashion MNIST を準備
    tensorflow_datasets の loadで, 「batch_size = -1」を指定すると一括読み込みになる.
    fashion_mnist, metadata = tfds.load(
        name="fashion_mnist", as_supervised=False, with_info=True, batch_size = -1)
    train, test = fashion_mnist['train'], fashion_mnist['test']
    print(metadata)
    

    [image]
  6. train と test の形と次元を確認
    print(train)
    print(test)
    

    [image]
  7. データの確認表示
    class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
    plt.figure(figsize=(10,10))
    for i in range(25):
      plt.subplot(5,5,i+1)
      plt.xticks([])
      plt.yticks([])
      plt.grid(False)
      image, label = train["image"][i], train["label"][i]
      plt.imshow(image.numpy()[:, :, 0].astype(np.float32), cmap=plt.get_cmap("gray"))
      plt.xlabel(class_names[label])
    
    plt.show()
    

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

    変数 x_train: サイズ 28 × 28 の 60000枚の濃淡画像,値が 0 から 1 になるように調整

    変数 y_train: 60000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)

    変数 x_test: サイズ 28 × 28 の 10000枚の濃淡画像,値が 0 から 1 になるように調整

    変数 y_test: 10000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)

    x_train, y_train = train["image"].numpy().astype("float32") / 255.0, train["label"] 
    x_test, y_test = test["image"].numpy().astype("float32") / 255.0, test["label"]
    

    [image]
  9. ニューラルネットワークの作成

    2層のニューラルネットワークを作成

    1層目:ユニット数は 128

    2層目:ユニット数は 10

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

    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Flatten(input_shape=(28, 28, 1)))
    m.add(tf.keras.layers.Dense(units=128, activation=tf.nn.relu))
    m.add(tf.keras.layers.Dropout(rate=0.2))
    m.add(tf.keras.layers.Dense(units=10, activation=tf.nn.softmax))
    m.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    

    [image]

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

    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Flatten(input_shape=(28, 28, 1)))
    m.add(tf.keras.layers.Dense(units=128, activation=tf.nn.relu))
    m.add(tf.keras.layers.Dropout(rate=0.2))
    m.add(tf.keras.layers.Dense(units=10, activation=tf.nn.softmax))
    m.compile(optimizer=tf.keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
    
  10. ニューラルネットワークの確認表示
    print(m.summary())
    

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

    参考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]
  12. ニューラルネットワークの訓練(学習)を行う
    history = m.fit(x_train, y_train, epochs=50)
    

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

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

    print( m.evaluate(x_test, y_test) )
    

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

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

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

    predictions = m.predict( x_test )
    print( predictions[0] )
    

    [image]
  15. 正解表示

    テスト画像 0 番の正解を表示

    print( y_test[0] )
    

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

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


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

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