概念
L1 正則化(Lasso Regularization):L1 正則化通過在損失函數中添加參數的絕對值之和作為懲罰項,促使部分參數變為零,實現特征選擇。適用于稀疏性特征選擇問題。
L2 正則化(Ridge Regularization):L2 正則化通過在損失函數中添加參數的平方和作為懲罰項,使得參數值保持較小。適用于減小參數大小,減輕參數之間的相關性。
彈性網絡正則化(Elastic Net Regularization):彈性網絡是 L1 正則化和 L2 正則化的結合,綜合了兩者的優勢。適用于同時進行特征選擇和參數限制。
數據增強(Data Augmentation):數據增強是通過對訓練數據進行隨機變換來擴展數據集,以提供更多的樣本。這有助于模型更好地泛化到不同的數據變化。
早停(Early Stopping):早停是一種簡單的正則化方法,它通過在訓練過程中監控驗證集上的性能,并在性能不再改善時停止訓練,從而避免模型過擬合訓練數據。
批標準化(Batch Normalization):批標準化是一種在每個小批次數據上進行標準化的技術,有助于穩定網絡的訓練,減少內部協變量偏移,也可以視為一種正則化方法。
權重衰減(Weight Decay):權重衰減是在損失函數中添加參數的權重平方和或權重絕對值之和,以限制參數的大小。
DropConnect:類似于 Dropout,DropConnect 隨機地將神經元與其輸入連接斷開,而不是將神經元的輸出置為零。
代碼實現
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler# 加載數據
data = load_iris()
X = data.data
y = data.target# 數據預處理
scaler = StandardScaler()
X = scaler.fit_transform(X)
y = keras.utils.to_categorical(y, num_classes=3)# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 定義模型
def build_model(regularization=None):model = keras.Sequential([layers.Input(shape=(X_train.shape[1],)),layers.Dense(64, activation='relu', kernel_regularizer=regularization),layers.Dense(32, activation='relu', kernel_regularizer=regularization),layers.Dense(3, activation='softmax')])return model# L1 正則化
model_l1 = build_model(keras.regularizers.l1(0.01))
model_l1.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_l1.fit(X_train, y_train, epochs=50, batch_size=8, validation_split=0.1)# L2 正則化
model_l2 = build_model(keras.regularizers.l2(0.01))
model_l2.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_l2.fit(X_train, y_train, epochs=50, batch_size=8, validation_split=0.1)# 彈性網絡正則化
model_elastic = build_model(keras.regularizers.l1_l2(l1=0.01, l2=0.01))
model_elastic.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_elastic.fit(X_train, y_train, epochs=50, batch_size=8, validation_split=0.1)# 早停(Early Stopping)
early_stopping = keras.callbacks.EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)
model_early = build_model()
model_early.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_early.fit(X_train, y_train, epochs=100, batch_size=8, validation_split=0.1, callbacks=[early_stopping])# 評估模型
print("L1 Regularization:")
model_l1.evaluate(X_test, y_test)print("L2 Regularization:")
model_l2.evaluate(X_test, y_test)print("Elastic Net Regularization:")
model_elastic.evaluate(X_test, y_test)print("Early Stopping:")
model_early.evaluate(X_test, y_test)