【tensorflow】tf.keras + class 6 步搭建神經網路
阿新 • • 發佈:2020-08-18
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。
六步:
- import 相關模組。
- 指定要喂入網路的訓練集和測試集。
- class MyModel(Model) model = MyModel()
- 在 compile() 中配置訓練方法。
- 在 fit() 中執行訓練過程。
- 用 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()