ここでの「分類」は,データから,そのラベル(クラス名など)を求めるもの. 分類のために,教師データを用いて事前学習を行う.
次を行うプログラムの例
ニューロンの数,ニューロンの種類などの設定
使用する最適化手法,誤差算出法(損失関数)などの設定
教師データを使用.結合の重みが変化
データの分類を行う
このページの内容は,Google Colaboratory でも実行できる.
そのために,次の URL で,Google Colaboratory のノートブックを準備している.
次のリンクをクリックすると,Google Colaboratory のノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコードを実行することができる.Google Colaboratory のノートブックは書き換えて使うこともできる.このとき,書き換え後のものを,各自の Google ドライブ内に保存することもできる.
https://colab.research.google.com/drive/18Nf9FPFhOvx8_V30z8PdBD2kcyDap8b7?usp=sharing
自分で,Google Colaboratory のノートブックを新規作成する場合(上のリンクを使わない場合や)は,前準備を行う.
https://colab.research.google.com
Google Colab はオンラインの Python 開発環境. 使用するには Google アカウントが必要
入力: 4個の数値のまとまり
出力: 「4個の数字のまとまり」について, 3種類の中から 1つに分類
1層目:ニューロン 64個,relu
2層目: ニューロン 3個, softmax
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation
m = tf.keras.models.Sequential([
tf.keras.layers.Dense(units=64, input_dim=4, activation='relu'),
tf.keras.layers.Dense(units=3, activation='softmax')
])
print(m.summary())
動画 URL: https://www.youtube.com/watch?v=dNPeVCvL5Jg
ニューラルネットワークの出力と,教師データの正解との誤差を最小にするという最適化を行う
Adadelta, Adagrad, Adam, RMSprop, SGD など
binary_crossentropy, categorical_crossentropy, cosine_similarity, kld, kullback_leibler_divergence, mae など
次のプログラムでは
m.compile(loss=tf.keras.losses.categorical_crossentropy,
optimizer=tf.keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
動画 URL: https://www.youtube.com/watch?v=dTMiGBpGAbg
学習の繰り返し回数は 1000回にしている
import numpy as np x = np.array( [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 1, 1], [0, 1, 0, 0], [0, 1, 0, 1], [0, 1, 1, 0], [0, 1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 0, 1, 1], [1, 1, 0, 0], [1, 1, 0, 1], [1, 1, 1, 0], [1, 1, 1, 1]]) y = np.array( [0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0]) m.fit(x, tf.keras.utils.to_categorical(y), epochs=1000)
動画 URL: https://www.youtube.com/watch?v=so0zte2zfvk
m.predict( np.array([[1, 1, 0, 0]]) )
m.predict( np.array([[0, 1, 0, 1]]) )
m.predict( np.array([[1, 0, 0, 1]]) )