六步法:
一.import? ?
導入各種庫,比如:
import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras import Model
import numpy as np
import pandas as pd
# 可能還會根據需求導入其他庫,如用于數據可視化的 matplotlib 等
import matplotlib.pyplot as plt
二.train,test
準備訓練數據和測試數據,比如:
# 以 MNIST 數據集為例
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 數據預處理
x_train, x_test = x_train / 255.0, x_test / 255.0
? 首先,從相應的數據集中加載數據,如這里使用 mnist.load_data() 加載 MNIST 手寫數字數據集,得到訓練集的特征 x_train 和標簽 y_train,以及測試集的特征 x_test 和標簽 y_test。然后,對數據進行預處理,常見的預處理操作包括歸一化、標準化等。在上述代碼中,將圖像像素值除以 255,將其縮放到 0 到 1 的范圍,這有助于模型的訓練和收斂。
三.model=tf.keras.models.Sequential
構建模型架構,比如:
model = tf.keras.models.Sequential([Flatten(input_shape=(28, 28)),Dense(128, activation='relu'),Dense(10, activation='softmax')
])
四.model.compile
配置模型訓練過程,比如:
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
這一步用于配置模型的訓練過程,主要設置三個重要參數:
optimizer:優化器,用于調整模型的參數以最小化損失函數。adam 是一種常用的優化器,它結合了 AdaGrad 和 RMSProp 的優點,具有自適應學習率的能力。
loss:損失函數,用于衡量模型預測結果與真實標簽之間的差異。其中sparse_categorical_crossentropy 適用于標簽為整數編碼的多分類問題。
metrics:評估指標,用于在訓練和測試過程中監控模型的性能。accuracy 表示準確率,即模型預測正確的樣本數占總樣本數的比例。
五,model.fit
進行模型訓練,使用訓練模型進行迭代訓練。
model.fit(x_train, y_train, epochs=5)
六,model.summary
這一步用于打印模型的結構信息,包括每一層的名稱、輸出形狀和參數數量等。通過查看?model.summary()
?的輸出,你可以了解模型的整體架構和參數規模,幫助你檢查模型是否符合預期,以及評估模型的復雜度。
model.summary()
各自的使用方法:
Flatten只是把數值特征拉成一維數組
Dense全連接
后面是卷積神經網絡層和循環神經網絡層
compile配置訓練方法。
validation_data和validation_split二選一,進行訓練。
validation_freq 多少輪訓練后用測試集測試一次。
model.summary()打印出統計結果,其中可以看到,總共的參數15個,可訓練參數15個,不可訓練參數0個。
以下是用六步法搭建鳶尾花分類。
import tensorflow as tf
from sklearn import datasets
import numpy as npx_train = datasets.load_iris().data
y_train = datasets.load_iris().targetnp.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)model = tf.keras.models.Sequential([tf.keras.layers.Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())
])model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['sparse_categorical_accuracy'])model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)model.summary()
首先import,然后兩個train交代訓練集和測試集。
np到tf這幾個random用于打亂數據集設置。
model中設置網絡結構。3指的是神經元個數是3,activation選用激活函數,最后是選用正則化方法。
complie中配置訓練方法,SGD優化器,學習率0.1,選用SparseCategoricalCrossentropy當做損失函數,由于神經末端使用softmax函數,輸出不是原始分布,所以logits=False。
鳶尾花數據集給的是0,1,2是數值,神經網絡前向輸出是概率分布,選擇sparse_categorical_accuracy作為測評指標。
fit中執行訓練過程,分別是 輸入特征,訓練集標簽,訓練時一次喂給神經網絡多少組數據batch_size,循環迭代次數,validation_split=0.2告知從訓練集中選擇百分之20數據當做測試集,validation_freq=20,表示迭代20次,在測試集中驗證一次準確率。
運行結果:
可見,打印出了網絡結構和參數統計。