PyTorch 验证阶段:评估模型准确率

在 PyTorch 中,验证阶段用于评估训练好的模型在未见过的数据上的性能。这通常是在每个训练周期结束后进行的。以下是一个简单的验证阶段代码示例,演示了如何评估模型的准确率:

network.eval()
val_correct = 0
val_total = 0

with torch.no_grad():
    for j, val_input_tensor in enumerate(val_tensors):
        val_output = network(val_input_tensor)

        # 计算相似度
        val_target_similarity = F.cosine_similarity(val_output, tensor_list[j].unsqueeze(0), dim=1)

        val_other_similarities = []
        for k, tensor in enumerate(tensor_list):
            if k != j:
                similarity = F.cosine_similarity(val_output, tensor.unsqueeze(0), dim=1)
                val_other_similarities.append(similarity)

        val_other_similarities = torch.cat(val_other_similarities)

        val_labels = [torch.tensor([1, 0, 0, 0]), torch.tensor([0, 1, 0, 0]), torch.tensor([0, 0, 1, 0]), torch.tensor([1, 1, 1, 1])]
        val_label_index = torch.argmax(tensor_list[j])
        val_label = val_labels[val_label_index]

        if val_target_similarity > torch.max(val_other_similarities):
            val_predicted_index = torch.argmax(val_output)
            if torch.all(torch.eq(val_label, val_labels[val_predicted_index])):
                val_correct += 1

        val_total += 1

# 打印验证信息
print('Validation Accuracy: %.2f%%' % (100 * val_correct / val_total))

解释:

  1. network.eval(): 将神经网络设置为评估模式。这将禁用诸如 dropout 和 batch normalization 等特定于训练的操作,以确保一致的预测。
  2. torch.no_grad(): 使用该上下文管理器来关闭梯度计算,因为在验证阶段我们不需要计算梯度。这可以提高性能,因为可以跳过一些不必要的计算。
  3. 循环遍历验证样本: 对每个验证样本,模型进行预测,并计算输出与自身标签之间的相似度,以及输出与其他标签之间的相似度。
  4. 判断预测是否正确: 通过比较相似度和标签信息,判断预测是否正确。
  5. 统计准确率: 记录正确的预测数量,并计算最终的验证准确率。

通过验证阶段,我们可以评估模型在未见过的数据上的性能,这有助于我们了解模型的泛化能力,并根据需要调整训练过程。

PyTorch 验证阶段:评估模型准确率

原文地址: https://www.cveoy.top/t/topic/MYD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录