【tensorflow】tf.keras + Sequential() 6 步搭建神經網絡


tf.keras 是 tensorflow API,可以快速搭建神經網絡模型。

 

六步:

  1. import 相關模塊。
  2. 指定要喂入網絡的訓練集和測試集。
  3. 在 Sequential() 中搭建網絡結構。
  4. 在 compile() 中配置訓練方法。
  5. 在 fit() 中執行訓練過程。
  6. 用 summary() 打印出網絡的結構和參數統計

 

 

Sequential()

可以認為是一種容器,這個容器封裝了一個神經網絡結構。

在 Sequential() 中,要描述從輸入層到輸出層每一層的網絡結構。

model = tf.keras.models.Sequential([網絡結構])

 

每一層的網絡結構可以是:

拉直層:不含計算,只是形狀轉換,把輸入特征拉直成一維數組

tf.keras.layers.Flatten()

全連接層

tf.keras.layers.Dense(神經元個數, activation="激活函數", kernel_regularizer=哪種正則化)

  • 激活函數可以選擇:“relu”,“softmax”,“sigmoid”,“tanh”(以字符串給出)
  • 正則化可以選擇:

tf.keras.regularizers.l1()

tf.keras.regularizers.l2()

 

卷積神經網絡層

循環神經網絡層

 

 

compile()

配置神經網絡的訓練方法,告知訓練時選擇的優化器、損失函數和評測指標。

model.compile(optimizer=優化器, loss=損失函數, metrics=["評測指標"])

  • 優化器可以是字符串形式給出的優化器名字:“sgd”,“adagrad”,“adadelta”,“adam”

還可以是函數形式:

tf.keras.optimizers.SGD(lr=學習率, momentum=動量參數)

tf.keras.optimizers.Adagrad(lr=學習率)

tf.keras.optimizers.Adadelta(lr=學習率)

tf.keras.optimizers.Adam(lr=學習率, beta_1=0.9, beta_2=0.999)

  • loss 可以是字符串給出的損失函數名字:“mse”,“sparse_categorical_crossentropy”

也可以是函數形式:

tf.keras.losses.MSE()

tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

有些神經網絡的輸出是經過了softmax函數的概率分布,有些則不經概率分布直接輸出。

可以認為 from_logits 這個參數是在詢問:是否是原始輸出,即沒有經過概率分布的輸出。

如果神經網絡預測結果輸出前經過了概率分布,寫False;

如果神經網絡預測結果輸出前沒有經過概率分布,寫True。

  • metrics 告知網絡評測指標:

y_:標簽,y:預測結果

“accuracy”:y_和y都是以數字形式給出

“categorical_accuracy”:y_和y都是以獨熱碼(概率分布)的形式給出

“sparse_categorical_accuracy”:y_以數值形式給出,y以獨熱碼形式給出

 

 

fit()

執行訓練過程。

model.fit(訓練集的輸入特征, 訓練集的標簽,

          batch_size=, epochs=,

          validation_data=(測試集的輸入特征, 測試集的標簽),

          validation_split=從訓練集中划分多少比例給測試集,

          validation_freq=多少次epoch測試一次 )

  • validation_data,validation_split 二選其一

 

 

summary()

打印出網絡的結構和參數統計。

 

 

鳶尾花分類代碼:(不使用 tf.keras API的代碼

# import 相關模塊
import tensorflow as tf import numpy as np from sklearn import datasets # 指定要喂入網絡的訓練集和測試集
x_train = datasets.load_iris().data y_train = datasets.load_iris().target # 數據集亂序
np.random.seed(116) np.random.shuffle(x_train) np.random.seed(116) np.random.shuffle(y_train) tf.random.set_seed(116) # 在 Sequential() 中搭建網絡結構
model = tf.keras.models.Sequential( # 全連接層
    # tf.keras.layers.Dense(神經元個數,
    # activation="激活函數",
    # kernel_regularizer=哪種正則化)
    [tf.keras.layers.Dense(3, activation="softmax", kernel_regularizer=tf.keras.regularizers.l2())] ) # 使用 compile() 配置神經網絡的訓練方法 # model.compile(optimizer=優化器, # loss=損失函數, # metrics=["評測指標"])
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=[tf.keras.metrics.sparse_categorical_accuracy]) # 在 fit() 中執行訓練過程 # model.fit(訓練集的輸入特征, 訓練集的標簽, # batch_size=, epochs=, # validation_data={測試集的輸入特征, 測試集的標簽}, # validation_split=從訓練集中划分多少比例給測試集, # validation_freq=多少次epoch測試一次 # )
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20) # 打印出網絡的結構和參數統計
model.summary()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM