概念
參數(Parameters):
參數是模型內部學習的變量,它們通過訓練過程自動調整以最小化損失函數。在神經網絡中,參數通常是連接權重(weights)和偏置(biases),它們控制了模型的行為和預測能力。通過反向傳播算法,模型會根據訓練數據來調整這些參數,使得模型能夠更好地擬合數據。訓練數據的每個樣本都會影響參數的更新,最終目標是在訓練集上獲得良好的性能。
超參數(Hyperparameters):
超參數是在模型訓練之前設置的參數,它們不會通過訓練過程進行調整。超參數直接影響著模型的訓練和性能表現,因此它們需要在訓練之前進行選擇和調整。超參數的選擇可能會影響模型的收斂速度、泛化能力、過擬合和欠擬合等。一些常見的超參數包括學習率、批大小、迭代次數、隱藏層的神經元數量、正則化參數等。
總結
:
參數是模型內部學習的變量,通過訓練過程自動調整。
超參數是在訓練之前設置的參數,直接影響模型的訓練和性能表現。
優化參數可以使模型更好地適應訓練數據,而合適的超參數選擇可以提高模型的泛化能力和性能。
代碼實現
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, optimizers# 構建一個簡單的神經網絡模型
def build_model(learning_rate, hidden_units, dropout_rate):model = keras.Sequential([layers.Input(shape=(784,)), # 輸入層,每個樣本有784個特征layers.Dense(hidden_units, activation='relu'), # 隱藏層,使用ReLU激活函數layers.Dropout(dropout_rate), # Dropout層,防止過擬合layers.Dense(10, activation='softmax') # 輸出層,10個類別])# 編譯模型,選擇優化器和損失函數optimizer = optimizers.Adam(learning_rate=learning_rate)model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])return model# 加載數據
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(-1, 28 * 28).astype('float32') / 255.0
x_test = x_test.reshape(-1, 28 * 28).astype('float32') / 255.0
y_train = keras.utils.to_categorical(y_train, num_classes=10)
y_test = keras.utils.to_categorical(y_test, num_classes=10)# 設置超參數
learning_rate = 0.001
hidden_units = 128
dropout_rate = 0.2
batch_size = 64
epochs = 10# 構建模型
model = build_model(learning_rate, hidden_units, dropout_rate)# 訓練模型
model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)# 評估模型
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print("Test Loss:", test_loss)
print("Test Accuracy:", test_accuracy)