PyTorch 训练数据准确率计算示例

以下是使用 PyTorch 代码计算训练数据的准确率并保存网络参数的示例:

# 统计准确率
correct_total = 0
total = 0
for i, input_tensor in enumerate(train_tensors):
    optimizer.zero_grad()

    output = network(input_tensor)

    loss = custom_loss(output, tensor_list[i])

    # 计算自身标签和其他标签的相似度
    target_similarity = F.cosine_similarity(output, tensor_list[i].unsqueeze(0), dim=1)
    label_list = [torch.tensor([1, 0, 0, 0]), torch.tensor([0, 1, 0, 0]), torch.tensor([0, 0, 1, 0]), torch.tensor([1, 1, 1, 1])]
    other_list = []
    for label_tensor in label_list:
        if not torch.all(torch.eq(tensor_list[i], label_tensor)):
            other_list.append(label_tensor)

    if target_similarity > torch.max(torch.stack([F.cosine_similarity(output, other.unsqueeze(0), dim=1) for other in other_list]), dim=0).values:
        correct_total += 1

    total += 1

# 计算最终的正确率
accuracy = correct_total / total
running_loss += loss.item()

# 保存网络参数
if epoch == num_epochs - 1:
    torch.save(network.state_dict(), 'final_model.pt')

# 打印训练信息
print('train Accuracy: %.2f%%' % (100 * accuracy))

代码解释

  1. 迭代训练数据: 代码使用循环遍历训练数据集 train_tensors 中的每个样本 input_tensor
  2. 模型预测: 使用模型 networkinput_tensor 进行预测,得到预测结果 output
  3. 计算损失: 使用自定义损失函数 custom_loss 计算预测结果 output 和目标标签 tensor_list[i] 之间的损失。
  4. 计算相似度: 使用 F.cosine_similarity() 函数计算 output 和目标标签 tensor_list[i] 之间的余弦相似度,并将结果存储在 target_similarity 中。
  5. 构建其他标签列表: 创建一个列表 other_list,包含所有不等于当前样本标签的标签张量。
  6. 比较相似度: 计算 outputother_list 中每个标签张量之间的余弦相似度,并使用 torch.max() 找到最大的相似度。然后将该最大相似度与 target_similarity 进行比较。如果 target_similarity 大于最大相似度,则说明模型预测正确,将 correct_total 加 1。
  7. 计算准确率: 循环结束后,使用 correct_totaltotal 计算最终的准确率 accuracy
  8. 更新累计损失: 将当前损失值 loss.item() 添加到累计损失 running_loss 中。
  9. 保存模型参数: 如果当前训练轮数等于总训练轮数减 1,则使用 torch.save() 函数将模型参数保存到文件 'final_model.pt' 中。
  10. 打印训练信息: 打印当前训练的准确率。

这段代码使用余弦相似度比较模型预测结果和目标标签的相似度,并使用最大相似度来判断预测是否正确。通过计算准确率,可以评估模型在训练集上的性能。


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

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