使用python基本庫程式碼實現神經網路常見層

阿坦發表於2024-07-04

一:批次歸一化(Batch Normalization)

程式碼解釋:

  1. 函式定義

    • batch_norm 函式接受輸入資料 X、縮放引數 gamma、平移引數 beta 和一個小常數 epsilon,用於防止除零錯誤。
    • X 的形狀為 (N, D),其中 N 是批次大小,D 是特徵維度。
    • gammabeta 的形狀為 (1, D)
  2. 計算批次均值和方差

    • mean = np.mean(X, axis=0) 計算每個特徵的均值。
    • variance = np.var(X, axis=0) 計算每個特徵的方差。
  3. 歸一化處理

    • X_normalized = (X - mean) / np.sqrt(variance + epsilon) 對每個特徵進行歸一化處理,使其均值為0,方差為1。
  4. 縮放和平移

    • normalized_X = gamma * X_normalized + beta 進行縮放和平移變換。
  5. 示例資料

    • 使用一個示例資料 X 進行測試,列印歸一化後的資料。

透過這些步驟,可以實現批次歸一化。該實現方式只使用了NumPy庫,可以方便地理解和應用於各種機器學習和深度學習專案中。

使用python基本庫程式碼實現神經網路常見層
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)
View Code

相關文章