1. 程式人生 > 實用技巧 >【tensorflow】tf.keras + class 6 步搭建神經網路

【tensorflow】tf.keras + class 6 步搭建神經網路

tf.keras + Sequential()可以搭建出上層輸入就是下層輸出的順序網路結構,但是無法寫出一些帶有跳連的非順序網路結構。

這時候可以選擇用類 class 搭建神經網路結構,即使用 class 類封裝一個網路結構:

...

class MyModel(Model):
  def __init__(self):
    super(MyModel, self).__init__()
    定義網路結構塊
  def call(self, x):
    呼叫網路結構塊,實現前向傳播
    return y


model = MyModel()

...

可以認為 __init__() 函式準備出了搭建網路所需的各種積木,call() 函式呼叫積木完成了神經網路的搭建,即實現前向傳播,從輸入x到輸出y。

六步:

  1. import 相關模組。
  2. 指定要喂入網路的訓練集和測試集。
  3. class MyModel(Model) model = MyModel()
  4. 在 compile() 中配置訓練方法。
  5. 在 fit() 中執行訓練過程。
  6. 用 summary() 打印出網路的結構和引數統計

程式碼:

import tensorflow as tf
from  tensorflow.keras.layers import Dense
from tensorflow.keras import Model from sklearn import datasets import numpy as np # 讀取訓練用的輸入特徵和標籤 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)
# 定義神經網路類 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() # 配置訓練方法 model.compile(optimizer=tf.optimizers.SGD(lr=0.1), loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=[tf.keras.metrics.sparse_categorical_accuracy]) # 執行訓練過程 model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20) # 列印網路的結構和引數 model.summary()