DL with python(4)-Kerasに基づく二層ニューラルネットワークアヤメの分類
24196 ワード
本文は中国大学慕課の「人工知能実践:Tensorflowノート」の第3回の内容に関連し、kerasフレームワークを用いてニューラルネットワークモデルを構築し、伝統的なデータセットであるアヤメのデータセットを分類した.
実装された機能は第1回目のニューラルネットワークと同様であり,詳細はDL with python(1)−TensorFlowに基づく2層ニューラルネットワークアヤメの分類具体的な関数の機能概要を参照DL with python(5)−Kerasにおけるニューラルネットワーク関数(簡単)
tf.kerasはニューラルネットワークの“6歩法”を構築します
tf.kerasはtensorflow 2が導入した高パッケージ度のフレームワークであり、ニューラルネットワークモデルを迅速に構築するために使用することができ、kerasは迅速な実験をサポートするために生まれ、考えを迅速に結果に変換することができ、深い学習フレームワークの中で最終的に使いやすいものであり、一致して簡潔なAPIを提供し、一般的な応用下の作業量を極めて減らすことができる.コードのパッケージング度合いと多重性を向上させる.kerasによるニューラルネットワークの構築には6つのステップしか必要ありません.以下のようにします.
第一歩: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()はネットワーク構造を印刷し、パラメータの数を統計します.
tf.keras 6ステップコード実装
次にkerasのコードを6つのステップに分けて示します
classを使用してニューラルネットワークを構築
Sequentialを使用すると、ネットワーク構造を迅速に構築できますが、ネットワークにホップなどの他の複雑なネットワーク構造が含まれている場合は、Sequentialは表示できません.これはclassを使用してネットワーク構造を宣言する必要があります.実装コードは、第3のステップを除いて、前と同じです.
実行結果
2つのコードの実行結果は同じで,まず訓練ラウンド出力パラメータに従う.
次に、ネットワーク構造およびパラメータ統計(トレーニング可能パラメータおよびトレーニング不可パラメータを含む)を印刷します.
実装された機能は第1回目のニューラルネットワークと同様であり,詳細はDL with python(1)−TensorFlowに基づく2層ニューラルネットワークアヤメの分類具体的な関数の機能概要を参照DL with python(5)−Kerasにおけるニューラルネットワーク関数(簡単)
tf.kerasはニューラルネットワークの“6歩法”を構築します
tf.kerasはtensorflow 2が導入した高パッケージ度のフレームワークであり、ニューラルネットワークモデルを迅速に構築するために使用することができ、kerasは迅速な実験をサポートするために生まれ、考えを迅速に結果に変換することができ、深い学習フレームワークの中で最終的に使いやすいものであり、一致して簡潔なAPIを提供し、一般的な応用下の作業量を極めて減らすことができる.コードのパッケージング度合いと多重性を向上させる.kerasによるニューラルネットワークの構築には6つのステップしか必要ありません.以下のようにします.
第一歩: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()はネットワーク構造を印刷し、パラメータの数を統計します.
tf.keras 6ステップコード実装
次にkerasのコードを6つのステップに分けて示します
# ,
import tensorflow as tf
from sklearn import datasets
import numpy as np
tf.compat.v1.enable_eager_execution()
# ,
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
#
np.random.seed(116) #
np.random.shuffle(x_train) # x
np.random.seed(116) # x
np.random.shuffle(y_train) # y
tf.compat.v2.random.set_seed(116)
# ,
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
]) # , ,
# ,
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1), # SGD , 0.1
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), # , ->False
metrics=['sparse_categorical_accuracy']) # ,
# , , , , , , 20%, 20
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
# ,
model.summary()
classを使用してニューラルネットワークを構築
Sequentialを使用すると、ネットワーク構造を迅速に構築できますが、ネットワークにホップなどの他の複雑なネットワーク構造が含まれている場合は、Sequentialは表示できません.これはclassを使用してネットワーク構造を宣言する必要があります.実装コードは、第3のステップを除いて、前と同じです.
# ,
import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
from sklearn import datasets
import numpy as np
tf.compat.v1.enable_eager_execution()
# ,
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
#
np.random.seed(116) #
np.random.shuffle(x_train) # x
np.random.seed(116) # x
np.random.shuffle(y_train) # y
tf.compat.v2.random.set_seed(116)
# , class
class IrisModel(Model):
def __init__(self):
super(IrisModel, self).__init__()
self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2()) #
def call(self, x):
y = self.d1(x) # d1, x y
return y
model = IrisModel() # model
# ,
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1), # SGD , 0.1
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), # , ->False
metrics=['sparse_categorical_accuracy']) # ,
# , , , , , , 20%, 20
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
# ,
model.summary()
実行結果
2つのコードの実行結果は同じで,まず訓練ラウンド出力パラメータに従う.
......
Epoch 499/500
32/120 [=======>......................] - ETA: 0s - loss: 0.2851 - sparse_categorical_accuracy: 0.9688
120/120 [==============================] - 0s 58us/sample - loss: 0.3382 - sparse_categorical_accuracy: 0.9500
Epoch 500/500
32/120 [=======>......................] - ETA: 0s - loss: 0.6113 - sparse_categorical_accuracy: 0.6875
120/120 [==============================] - 0s 66us/sample - loss: 0.5049 - sparse_categorical_accuracy: 0.7917 - val_loss: 0.3395 - val_sparse_categorical_accuracy: 1.0000
次に、ネットワーク構造およびパラメータ統計(トレーニング可能パラメータおよびトレーニング不可パラメータを含む)を印刷します.
Model: "iris_model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) multiple 15
=================================================================
Total params: 15
Trainable params: 15
Non-trainable params: 0