tensorflow-Sequential、compile、fit、summary

1. tf.keras.models.Sequential([網(wǎng)絡(luò)結(jié)構(gòu)]) # 描述各層網(wǎng)絡(luò)

Sequentail()可以認(rèn)為是個(gè)容器,這個(gè)容器里封裝了一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。在Sequential中要描述從輸入層到輸出層每一層的網(wǎng)絡(luò)結(jié)構(gòu)。
每一層的網(wǎng)絡(luò)結(jié)構(gòu)可以是

  • 拉直層: tf.keras.layers.Flatten() ,這一層不含計(jì)算,只是形狀轉(zhuǎn)換,把輸入特征拉直,變成一維數(shù)組
  • 全連接層: tf.keras.layers.Dense(神經(jīng)元個(gè)數(shù),activation=“激活函數(shù)”,kernel_regularizer=哪種正則化), 這一層告知神經(jīng)元個(gè)數(shù)、使用什么激活函數(shù)、采用什么正則化方法
    • 激活函數(shù)可以選擇relu, softmax, sigmoid, tanh
    • 正則化可以選擇 tf.keras.regularizers.l1(), tf.keras.relularizers.l2()
  • 卷積神經(jīng)網(wǎng)絡(luò)層:tf.keras.layers.Conv2D(filters=卷積核個(gè)數(shù), kernel_size=卷積核尺寸, strides=卷積步長, padding="valid" or "same")
  • 循環(huán)神經(jīng)網(wǎng)絡(luò)層:tf.keras.layers.LSTM()

2. model.compile(optimizer=優(yōu)化器,loss=損失函數(shù),metrics=["準(zhǔn)確率"])

在這里告知訓(xùn)練時(shí)選擇的優(yōu)化器、損失函數(shù)、和評測指標(biāo)。
這些參數(shù)都可以使用字符串形式或函數(shù)形式

  • optimizer: 引導(dǎo)神經(jīng)網(wǎng)絡(luò)更新參數(shù)
    • sgd or tf.keras.optimizer.SGD(lr=學(xué)習(xí)率,momentum=動(dòng)量參數(shù))
    • adagrad or tf.keras.optimizer.Adagrad(lr=學(xué)習(xí)率)
    • adadelta or tf.keras.optimizer.Adadelta(lr=學(xué)習(xí)率)
    • adam or tf.keras.optimizer.Adam(lr=學(xué)習(xí)率, beta_1=0.9, beta_2=0.999)
  • loss: 損失函數(shù)
    • mes or tf.keras.losses.MeanSquaredError()
    • sparse_categorical_crossentropy or tf.keras.SparseCategoricalCrossentropy(from_logits=False)(是原始輸出還是經(jīng)過概率分布)
  • metrics:評測指標(biāo)
    • accuracy:y_ 和 y 都是數(shù)值,如y_=[1] y=[1]
    • categorical_accuracy: y_和y都是獨(dú)熱碼(概率分布),如y_=[0, 1, 0], y=[0.256, 0.695, 0.048]
    • sparse_categorical_accuracy: y_是數(shù)值,y是獨(dú)熱碼(概率分布),如y_=[1], y=[0.256, 0.695, 0.048]

3. model.fit(訓(xùn)練集的輸入特征,訓(xùn)練集的標(biāo)簽,batch_size= 每次喂入神經(jīng)網(wǎng)絡(luò)的樣本數(shù), epochs=迭代多少次數(shù)據(jù)集, validation_data=(測試集的輸入特征,測試集的標(biāo)簽,), validation_split=從訓(xùn)練集劃分多少比例給測試集,validation_freq=多少次epoch測試一次)

4. model.summary()

打印出網(wǎng)絡(luò)的結(jié)構(gòu)和參數(shù)統(tǒng)計(jì)

5. 示例:鳶尾花分類

import tensorflow as tf
from sklearn import datasets
import numpy as np

# 載入數(shù)據(jù)(訓(xùn)練集和測試集在訓(xùn)練時(shí)按比例劃分,此處暫無劃分)
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

# 用相同的隨機(jī)種子讓特征集和標(biāo)簽集亂序并一一對應(yīng)
np.random.seed(123)
np.random.shuffle(x_train)
np.random.seed(123)
np.random.shuffle(y_train)

# 搭建神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):3個(gè)神經(jīng)元的全連接層,采用softmax激活函數(shù),
# l2正則化防治過擬合
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(3, activation='softmax', 
                          kernel_regularizer=tf.keras.regularizers.l2())
])
"""
# class寫法
from tensorflow.keras import Model
from tensorflow.keras.layers import Dense


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)
        return y

model = IrisModel()
"""
# 配置訓(xùn)練方法:采用SGD優(yōu)化器,SparseCategoricalCrossentropy損失函數(shù)(由于采
# 用了softmax作為激活函數(shù),輸出的是概率而不是原始分布,所以from_logits
# 為False), sparse_categorical_accuracy作為評測指標(biāo)(由于鳶尾花標(biāo)簽
# 為[0, 1, 2], 而網(wǎng)絡(luò)結(jié)構(gòu)輸出的為概率分布)
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=["sparse_categorical_accuracy"])

# 訓(xùn)練模型:將20%的數(shù)據(jù)用于測試,每次喂入32組數(shù)據(jù),數(shù)據(jù)集循環(huán)
# 迭代500次,每迭代20次訓(xùn)練集要在測試集中驗(yàn)證一次準(zhǔn)確率
model.fit(x_train, y_train, batch_size=32, epochs=500, 
          validation_split=0.2, validation_freq=20)

# 打印出網(wǎng)絡(luò)結(jié)構(gòu)和參數(shù)統(tǒng)計(jì)
model.summary()

運(yùn)行結(jié)果:

Epoch 498/500
4/4 [==============================] - 0s 0s/step - loss: 0.3155 - sparse_categorical_accuracy: 0.9833
Epoch 499/500
1/4 [======>.......................] - ETA: 0s - loss: 0.2978 - sparse_categorical_accuracy: 1.0000
4/4 [==============================] - 0s 2ms/step - loss: 0.3251 - sparse_categorical_accuracy: 0.9750
Epoch 500/500
1/4 [======>.......................] - ETA: 0s - loss: 0.3148 - sparse_categorical_accuracy: 0.9688
4/4 [==============================] - 0s 10ms/step - loss: 0.3210 - sparse_categorical_accuracy: 0.9833 - val_loss: 0.4276 - val_sparse_categorical_accuracy: 0.9000
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                multiple                  15        
=================================================================
Total params: 15
Trainable params: 15
Non-trainable params: 0
_________________________________________________________________
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容