ニューラルネットワークの作成,訓練(学習),予測を行う. MNIST データセット,Fashion MNIST データセットを使用する.
MNIST データセット,Fashion MNIST データセットは形は同じ. データのダウンロードのときの操作が違うが,他は同じ操作になる.
目次
サイト内の関連ページ
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__)
mnist, metadata = tfds.load(
name="mnist", as_supervised=False, with_info=True, batch_size = -1)
train, test = mnist['train'], mnist['test']
print(metadata)
print(train) print(test)
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()
変数 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"]
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'])
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'])
print(m.summary())
参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/
from IPython.display import SVG SVG(tf.keras.utils.model_to_dot(m).create(prog='dot', format='svg'))
history = m.fit(x_train, y_train, epochs=50)
※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.
print( m.evaluate(x_test, y_test) )
予測を行わせたいデータは、x_test である
※ 予測させたいデータx_test は、Xの中からランダムに選ばれていたので、実行結果は下の図と違うものになる
predictions = m.predict( x_test ) print( predictions[0] )
テスト画像 0 番の正解を表示
print( y_test[0] )
参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/
import matplotlib.pyplot as plt
loss = history.history['loss']
epochs = range(1, len(loss) + 1)
# "bo" は青いドット
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.title('Training loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
# plt.clf() # 図のクリア
accuracy = history.history['accuracy']
epochs = range(1, len(accuracy) + 1)
# "bo" は青いドット
plt.plot(epochs, accuracy, 'bo', label='Training accuracy')
plt.title('Training accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
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__)
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)
print(train) print(test)
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()
変数 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"]
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'])
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'])
print(m.summary())
参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/
from IPython.display import SVG SVG(tf.keras.utils.model_to_dot(m).create(prog='dot', format='svg'))
history = m.fit(x_train, y_train, epochs=50)
※ 訓練(学習)などで乱数が使われるので,下図と違う値になる.
print( m.evaluate(x_test, y_test) )
予測を行わせたいデータは、x_test である
※ 予測させたいデータx_test は、Xの中からランダムに選ばれていたので、実行結果は下の図と違うものになる
predictions = m.predict( x_test ) print( predictions[0] )
テスト画像 0 番の正解を表示
print( y_test[0] )
参考Webページ: 訓練の履歴の可視化については,https://keras.io/ja/visualization/
import matplotlib.pyplot as plt
loss = history.history['loss']
epochs = range(1, len(loss) + 1)
# "bo" は青いドット
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.title('Training loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()
# plt.clf() # 図のクリア
accuracy = history.history['accuracy']
epochs = range(1, len(accuracy) + 1)
# "bo" は青いドット
plt.plot(epochs, accuracy, 'bo', label='Training accuracy')
plt.title('Training accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.
問い合わせ先: 金子邦彦(かねこ くにひこ) ![]()