概念
参数(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)