一:批次歸一化(Batch Normalization)
程式碼解釋:
-
函式定義:
batch_norm
函式接受輸入資料X
、縮放引數gamma
、平移引數beta
和一個小常數epsilon
,用於防止除零錯誤。X
的形狀為(N, D)
,其中N
是批次大小,D
是特徵維度。gamma
和beta
的形狀為(1, D)
。
-
計算批次均值和方差:
mean = np.mean(X, axis=0)
計算每個特徵的均值。variance = np.var(X, axis=0)
計算每個特徵的方差。
-
歸一化處理:
X_normalized = (X - mean) / np.sqrt(variance + epsilon)
對每個特徵進行歸一化處理,使其均值為0,方差為1。
-
縮放和平移:
normalized_X = gamma * X_normalized + beta
進行縮放和平移變換。
-
示例資料:
- 使用一個示例資料
X
進行測試,列印歸一化後的資料。
- 使用一個示例資料
透過這些步驟,可以實現批次歸一化。該實現方式只使用了NumPy庫,可以方便地理解和應用於各種機器學習和深度學習專案中。
import numpy as np # 批次歸一化函式 def batch_norm(X, gamma, beta, epsilon=1e-5): """ 實現批次歸一化 引數: X : 輸入資料,形狀為(N, D),其中N是批次大小,D是特徵維度 gamma : 縮放引數,形狀為(1, D) beta : 平移引數,形狀為(1, D) epsilon : 一個小常數,防止除零錯誤 返回: normalized_X : 歸一化後的資料,形狀與X相同 """ # 計算批次均值 mean = np.mean(X, axis=0) # 計算批次方差 variance = np.var(X, axis=0) # 對輸入資料進行歸一化處理 X_normalized = (X - mean) / np.sqrt(variance + epsilon) # 進行縮放和平移變換 normalized_X = gamma * X_normalized + beta return normalized_X # 示例資料 X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 縮放引數(通常初始化為1) gamma = np.ones((1, X.shape[1])) # 平移引數(通常初始化為0) beta = np.zeros((1, X.shape[1])) # 呼叫批次歸一化函式 normalized_X = batch_norm(X, gamma, beta) print("歸一化後的資料:\n", normalized_X)