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

TensorFlow, Keras で,IMDB データセットを扱う


TensorFlow

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

このページは,https://www.tensorflow.org/tutorials/keras/basic_text_classification の手順を, 示すものである.

サイト内の関連ページ

  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. Python の配列(アレイ)と画像データセット

    (1) IMDB データセットを準備

    変数 x_train: 25000件のデータ,批評文

    変数 y_train: 25000件のデータ,スコア

    変数 x_test: 25000件のデータ,批評文

    変数 y_test: 25000件のデータ,スコア

    imdb = tf.keras.datasets.imdb
    (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=10000)
    

    [image]

    (2) データの確認のための前準備

    # 単語を整数にマッピングする辞書
    word_index = imdb.get_word_index()
    
    # インデックスの最初の方は予約済み
    word_index = {k:(v+3) for k,v in word_index.items()}
    word_index[""] = 0
    word_index[""] = 1
    word_index[""] = 2  # unknown
    word_index[""] = 3
    
    reverse_word_index = dict([(value, key) for (key, value) in word_index.items()])
    
    def decode_review(text):
        return ' '.join([reverse_word_index.get(i, '?') for i in text])
    

    [image]

    (3) データの確認

    批評文

    decode_review(x_train[0])
    

    [image]

    スコア

    print(y_train[0])
    

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

    パッデングによる. 詳細は https://www.tensorflow.org/tutorials/keras/basic_text_classification に説明がある.

    x_train = tf.keras.preprocessing.sequence.pad_sequences(x_train, value=word_index[""], padding='post', maxlen=256)
    x_test = tf.keras.preprocessing.sequence.pad_sequences(x_test, value=word_index[""], padding='post', maxlen=256)
    

    [image]
  7. ニューラルネットワークの作成
    # 入力の形式は映画レビューで使われている語彙数(10,000語)
    vocab_size = 10000
    
    m = tf.keras.Sequential()
    m.add(tf.keras.layers.Embedding(vocab_size, 16))
    m.add(tf.keras.layers.GlobalAveragePooling1D())
    m.add(tf.keras.layers.Dense(16, activation=tf.nn.relu))
    m.add(tf.keras.layers.Dense(1, activation=tf.nn.sigmoid))
    m.compile(optimizer='adam',
                  loss='binary_crossentropy',
                  metrics=['accuracy'])
    

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

    [image]
  9. ニューラルネットワークの訓練(学習)を行う

    x_train, y_train を,訓練(学習)用データ (training set) と,検証用データ (validation set) に分ける

    x_val = x_train[:10000]
    partial_x_train = x_train[10000:]
    y_val = y_train[:10000]
    partial_y_train = y_train[10000:]
    history = m.fit(partial_x_train,
                        partial_y_train,
                        epochs=40,
                        batch_size=512,
                        validation_data=(x_val, y_val),
                        verbose=1)
    

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

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

    print( m.evaluate(x_test, y_test) )
    

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

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

    from IPython.display import SVG
    
    SVG(tf.keras.utils.model_to_dot(model).create(prog='dot', format='svg'))
    
  12. 訓練の履歴の可視化

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

    訓練時とテスト時で,大きく損失や精度が違っており,過学習が起きていることが確認できる


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

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