DL with python(4)-Kerasに基づく二層ニューラルネットワークアヤメの分類


本文は中国大学慕課の「人工知能実践: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つのステップに分けて示します
#    ,      
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