【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()

 


免責聲明!

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



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