ニューラルネットワークの作成,訓練(学習),予測を行う. MNIST データセット,Fashion MNIST データセットを使用する.
このページは,https://www.tensorflow.org/tutorials/keras/basic_text_classification の手順を, 示すものである.
サイト内の関連ページ
https://colab.research.google.com
Google Colab はオンラインの Python 開発環境. 使用するには Google アカウントが必要
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__)
(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)
(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])
(3) データの確認
批評文
decode_review(x_train[0])
スコア
print(y_train[0])
パッデングによる. 詳細は 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)
# 入力の形式は映画レビューで使われている語彙数(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'])
print(m.summary())
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)
※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.
print( m.evaluate(x_test, y_test) )
参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/
from IPython.display import SVG SVG(tf.keras.utils.model_to_dot(model).create(prog='dot', format='svg'))
参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/
訓練時とテスト時で,大きく損失や精度が違っており,過学習が起きていることが確認できる
import matplotlib.pyplot as plt
accuracy = history.history['accuracy']
val_accuracy = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(accuracy) + 1)
# "bo" は青いドット
plt.plot(epochs, loss, 'bo', label='Training loss')
# ”b" は青い実線
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
# plt.clf() # 図のクリア
accuracy = history.history['accuracy']
val_accuracy = history.history['val_accuracy']
plt.plot(epochs, accuracy, 'bo', label='Training acc')
plt.plot(epochs, val_accuracy, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.
問い合わせ先: 金子邦彦(かねこ くにひこ) ![]()