Skip to content

Keras - Model Evaluation and Prediction

在使用 model.fit() 训练模型后,接下来的关键步骤是在未见过的数据上评估其性能,并使用它对新输入进行预测。tf.keras 提供了专门的方法来执行这些任务。

评估用于衡量训练好的模型在训练期间未见过的新数据上的泛化能力。这通常使用一个单独的测试数据集(例如 x_test、y_test)进行,该数据集从训练过程中被保留了下来。

model.evaluate() 方法计算提供的数据的损失和任何已配置的指标(在 model.compile() 期间定义)。

语法:

model.evaluate(
x=None, # Input data (NumPy array, tf.data.Dataset, etc.)
y=None, # Target data (labels)
batch_size=None, # Number of samples per batch of computation
verbose='auto', # 0, 1, or 'auto'. Verbosity mode.
sample_weight=None, # Optional weights for test samples
steps=None, # Total number of steps (batches) before declaring evaluation finished
callbacks=None, # List of tf.keras.callbacks.Callback instances
return_dict=False, # If True, return a dict mapping metric names to values
**kwargs
)

关键参数:

  • x: 用于评估的输入数据(特征)。
  • y: 对应于 x 的真实标签或目标值。
  • batch_size: 每次处理的样本数量。影响内存使用和计算速度。
  • verbose: 控制日志输出(0 = 静默,1 = 显示进度条)。
  • return_dict: 如果为 True,返回一个字典,将指标名称(包括 ‘loss’)映射到计算出的值。如果为 False(默认),则返回一个标量值列表(损失在前,然后是编译时指定的指标顺序)。

示例(使用“模型编译”章节中的 MLP 模型):

# Assume 'model' is the trained MLP model
# Assume 'x_test', 'y_test' are the preprocessed test data and labels
results = model.evaluate(x_test, y_test, batch_size=128, verbose=1)
print("Test Loss:", results[0])
print("Test Accuracy:", results[1])
# --- Or using return_dict=True ---
results_dict = model.evaluate(x_test, y_test, batch_size=128, return_dict=True)
print("\nEvaluation Results (Dictionary):")
print(results_dict) # e.g., {'loss': 0.075, 'accuracy': 0.982}

输出提供了模型在测试集上性能的定量衡量。高准确率(对于分类)或低损失/MAE(对于回归)表明泛化能力好。

一旦您拥有一个经过训练和评估且满足您性能标准的模型,就可以使用它对新的、未见过且没有标签的数据进行预测。

model.predict() 方法为输入样本生成输出预测。

语法:

model.predict(
x, # Input data (NumPy array, tf.data.Dataset, etc.)
batch_size=None, # Number of samples per batch
verbose='auto', # Verbosity mode
steps=None, # Total number of steps (batches) before stopping
callbacks=None, # List of tf.keras.callbacks.Callback instances
**kwargs
)

关键参数:

  • x: 用于生成预测的输入数据。确保应用了与训练数据相同的预处理。
  • batch_size: 同时处理的样本数量。
  • verbose: 控制日志输出。

输出格式取决于模型的最后一层:

  • 分类 (softmax output): 返回一个概率分布数组,其中每一行对应一个输入样本,每一列对应一个类别概率。形状通常是 (num_samples, num_classes)。
  • 二分类 (sigmoid output): 返回一个概率数组(值在 0 到 1 之间),通常形状是 (num_samples, 1)。
  • 回归 (linear output): 返回一个预测的连续值数组,通常形状是 (num_samples, num_output_features)。

示例(使用 MLP 模型进行 MNIST 分类):

import numpy as np
# Assume 'model' is the trained MNIST MLP model
# Assume 'x_test' is the preprocessed test data
# Get predictions for the first 5 test images
predictions_probabilities = model.predict(x_test[:5])
print("Raw Predictions (Probabilities):\n", predictions_probabilities)
# To get the predicted class label, find the index with the highest probability
predicted_labels = np.argmax(predictions_probabilities, axis=1)
print("\nPredicted Labels:", predicted_labels)
# You can compare with the actual labels (if available)
# actual_labels = np.argmax(y_test[:5], axis=1) # Assuming y_test is one-hot encoded
# print("Actual Labels:", actual_labels)

predict() 方法是部署模型以生成新的、真实世界数据输出的核心函数。