ニューラルネットワークの作成,訓練(学習),予測を行う. Iris データを使用する.
ここで行うこと
説明資料: [パワーポイント]
サイト内の関連ページ
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__)
iris データセットの先頭部分
x, y に iris データを設定
次の Python プログラムを実行
import sklearn.datasets iris = sklearn.datasets.load_iris() x = iris.data y = iris.target
X は外花被片、内花被片の幅と高さである
print( x.shape ) print( x.ndim ) print( x )
配列(アレイ)の形:サイズは 150 × 4.次元数は 2.
y は花の種類のデータである
print( y.shape ) print( y.ndim ) print( y )
配列(アレイ)の形:サイズは 150.次元数は 1.
x_train, y_train, x_test, y_test に iris データを設定し,正規化
import sklearn.model_selection
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x, y, train_size=0.5)
# 2次元の配列. 要素は float64, 最大値と最小値を用いて正規化
def normalizer(A):
M = np.reshape(A, (len(A), -1))
M = M.astype('float32')
max = M.max(axis=0)
min = M.min(axis=0)
return (M - min)/(max - min)
x_train = normalizer(x_train)
x_test = normalizer(x_test)
print(x_train) print(y_train)
m = tf.keras.Sequential()
m.add(tf.keras.layers.Dense(units=64, input_dim=4, activation=tf.nn.relu))
m.add(tf.keras.layers.Dropout(rate=0.2))
m.add(tf.keras.layers.Dense(units=3, activation=tf.nn.softmax))
m.compile(optimizer=tf.keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True),
loss='sparse_categorical_crossentropy')
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, verbose=2) )
予測を行わせたいデータは、x_test である
※ 予測させたいデータx_test は、Xの中からランダムに選ばれていたので、実行結果は下の図と違うものになる
predictions = m.predict(x_test) print(predictions)
それぞれ、3つの数値の中で、一番大きいものはどれか?
m.predict(x_test).argmax(axis=1)
正解と比べてみる
print(y_test)
参考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()
m = tf.keras.Sequential()
m.add(tf.keras.layers.Dense(units=64, input_dim=4, activation=tf.nn.relu))
m.add(tf.keras.layers.Dropout(rate=0.2))
m.add(tf.keras.layers.Dense(units=3, activation=tf.nn.softmax))
m.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
print(m.summary())
history = m.fit(x_train, y_train, epochs=50)
print( m.evaluate(x_test, y_test, verbose=2) )
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()
本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.
問い合わせ先: 金子邦彦(かねこ くにひこ) ![]()