tensorflowで簡単なニューラルネットワークを構築してirisデータセットとMNISTデータセットをテストする

14982 ワード

1.手順
ステップ1:import関連モジュール、例えばimport tensorflow as tf
ステップ2:指定したトレーニングセットの入力x_など、入力ネットワークのトレーニングセットとテストセットを指定します.trainとラベルy_train,テストセットの入力x_testとラベルy_test. 
第三歩:層ごとにネットワーク構造を構築し、model=tf.keras.models.Sequential(). 
ステップ4:model.compile()に訓練方法を配置し,訓練時に使用するオプティマイザ,損失関数,最終評価指標を選択する. 
ステップ5:model.fit()では、トレーニングセットとテストセットの入力値とラベル、各batchのサイズ(batchsize)、およびデータセットの反復回数(epoch)を通知するトレーニングプロセスが実行される. 
ステップ6:modelを使用します.summary()はネットワーク構造を印刷し、パラメータの数を統計します.
2.関数の使い方の紹介
tf.keras.models.Sequential():Sequential関数はニューラルネットワークのネットワーク構造を記述するコンテナであり、Sequential関数の入力パラメータに入力層から出力層へのネットワーク構造を記述する.
Model.compile(optimizer=オプティマイザ、loss=損失関数、metrics=[「精度」)Compileは、ニューラルネットワークを構成するトレーニング方法に使用され、トレーニング時に使用されるオプティマイザ、損失関数、精度評価基準を通知します.
次のようになります.
optimizerは、文字列形式で与えられるオプティマイザの名前でも関数形式でもよく、関数形式で学習率、運動量、スーパーパラメータを設定できます.
オプションは、「sgd」or tf.optimizers.SGD(lr=学習率、decay=学習率減衰率、momentum=運動量パラメータ)‘adagrad’or tf.keras.optimizers.Adagrad(lr=学習率、decay=学習率減衰率)‘adadelta’or tf.keras.optimizers.Adadelta(lr=学習率、decay=学習率減衰率)‘adam’or tf.keras.optimizers.Adam(lr=学習率、decay=学習率減衰率)
Lossは文字列形式で与えられる損失関数の名前であってもよいし,関数形式であってもよい.
オプションは次のとおりです.
‘mse’or tf.keras.losses.MeanSquaredError() ‘sparse_categorical_crossentropy or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
損失関数はソフトウェアmaxなどの関数を介して出力を確率分布の形式に変換する必要があることが多い.from_logitsはこの損失関数を確率に変換する必要があるかどうかを示すために用いられ,Falseを取ると確率分布に変換し,Trueを取ると確率分布に変換していないことを示し,直接出力する.
Metrics寸法ネットワーク評価指標
オプションは次のとおりです.
‘accuracy’:y_yとyはすべて数値で、例えばy_=[1] y=[1]. ‘categorical_accuracy’:y_yともユニホットコードと確率分布で表される.y_=[0, 1, 0], y=[0.256, 0.695, 0.048].
‘sparse_ categorical_accuracy’:y_数値形式で与えられ、yは独熱符号形式で与えられる.y_=[1],y=[0.256, 0.695, 0.048].
model.fit(トレーニングセットの入力フィーチャー、トレーニングセットのラベル、batch_size、epochs、validation_data=(テストセットの入力フィーチャー、テストセットのラベル)、validataion_split=テストセットからトレーニングセットにどのくらいの割合を分割するか、validation_freq=テストされたepoch間隔回数)fit関数を用いてトレーニングプロセスを実行する
model.summary()summary関数は、ネットワーク構造とパラメータ統計を印刷するために使用されます.
3.ネットワークトレーニングirisデータセットの構築は以下の通りである.
 1 import tensorflow as tf
 2 from sklearn import datasets
 3 import numpy as np
 4 
 5 x_train = datasets.load_iris().data
 6 y_train = datasets.load_iris().target
 7 
 8 np.random.seed(116)
 9 np.random.shuffle(x_train)
10 np.random.seed(116)
11 np.random.shuffle(y_train)
12 tf.random.set_seed(116)
13 
14 model = tf.keras.models.Sequential([
15     tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
16 ])
17 
18 model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
19               loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
20               metrics=['sparse_categorical_accuracy'])
21 
22 model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
23 
24 model.summary()
 1 import tensorflow as tf
 2 from tensorflow.keras.layers import Dense
 3 from tensorflow.keras import Model
 4 from sklearn import datasets
 5 import numpy as np
 6 
 7 x_train = datasets.load_iris().data
 8 y_train = datasets.load_iris().target
 9 
10 np.random.seed(116)
11 np.random.shuffle(x_train)
12 np.random.seed(116)
13 np.random.shuffle(y_train)
14 tf.random.set_seed(116)
15 
16 class IrisModel(Model):
17     def __init__(self):
18         super(IrisModel, self).__init__()
19         self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
20 
21     def call(self, x):
22         y = self.d1(x)
23         return y
24 
25 model = IrisModel()
26 
27 model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
28               loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
29               metrics=['sparse_categorical_accuracy'])
30 
31 model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
32 model.summary()

以上の2つのセグメントのコードの違いは,第1セグメントがSequentialでネットワークを構築し,第2セグメントがカスタムネットワークであることである.
4.構築ネットワークトレーニングMNISTデータセットは以下の通り:
 1 import tensorflow as tf
 2 
 3 mnist = tf.keras.datasets.mnist
 4 (x_train, y_train), (x_test, y_test) = mnist.load_data()
 5 x_train, x_test = x_train / 255.0, x_test / 255.0
 6 
 7 model = tf.keras.models.Sequential([
 8     tf.keras.layers.Flatten(),
 9     tf.keras.layers.Dense(128, activation='relu'),
10     tf.keras.layers.Dense(10, activation='softmax')
11 ])
12 
13 model.compile(optimizer='adam',
14               loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
15               metrics=['sparse_categorical_accuracy'])
16 
17 model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
18 model.summary()
 1 import tensorflow as tf
 2 from tensorflow.keras.layers import Dense, Flatten
 3 from tensorflow.keras import Model
 4 
 5 mnist = tf.keras.datasets.mnist
 6 (x_train, y_train), (x_test, y_test) = mnist.load_data()
 7 x_train, x_test = x_train / 255.0, x_test / 255.0
 8 
 9 
10 class MnistModel(Model):
11     def __init__(self):
12         super(MnistModel, self).__init__()
13         self.flatten = Flatten()
14         self.d1 = Dense(128, activation='relu')
15         self.d2 = Dense(10, activation='softmax')
16 
17     def call(self, x):
18         x = self.flatten(x)
19         x = self.d1(x)
20         y = self.d2(x)
21         return y
22 
23 
24 model = MnistModel()
25 
26 model.compile(optimizer='adam',
27               loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
28               metrics=['sparse_categorical_accuracy'])
29 
30 model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
31 model.summary()

違いは、ネットワークを構築する際に使う方法の違いです