欢迎访问宙启技术站
智能推送

使用Python编写的判别器模型的测试方法

发布时间:2024-01-02 23:57:18

在使用Python编写的判别器模型中,测试方法的主要目的是评估模型的性能和准确性。测试方法通常会输入一些测试数据,然后使用已训练好的模型对这些数据进行预测,并与真实标签进行比较。下面是一个示例测试方法的代码和使用例子。

import torch

def test(model, test_loader, criterion):
    model.eval()  # 设置模型为评估模式
    
    test_loss = 0
    correct = 0
    
    with torch.no_grad():  # 在评估模式下不计算梯度
        for data, target in test_loader:
            data, target = data.to(device), target.to(device)
            
            output = model(data)
            
            test_loss += criterion(output, target).item()  # 计算损失函数
            
            pred = output.argmax(dim=1, keepdim=True)  # 获取预测结果
            correct += pred.eq(target.view_as(pred)).sum().item()  # 统计正确预测的数量
    
    test_loss /= len(test_loader.dataset)  
    
    accuracy = 100. * correct / len(test_loader.dataset)  # 计算预测准确率
    
    print('Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)'.format(
        test_loss, correct, len(test_loader.dataset), accuracy))

# 使用例子:MNIST手写数字识别任务

import torchvision
import torchvision.transforms as transforms
from torch.utils.data import DataLoader

# 设置随机种子
torch.manual_seed(42)

# 数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,))
])

# 加载测试数据集
testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
test_loader = DataLoader(testset, batch_size=64, shuffle=False)

# 导入模型
model = Net()
model.load_state_dict(torch.load('model.pt'))

# 设置计算设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

# 设置损失函数和优化器
criterion = nn.CrossEntropyLoss()

# 执行测试
test(model, test_loader, criterion)

在上述例子中,我们首先导入了必要的模块和库,并设置了随机种子以确保实验的可重复性。然后,我们定义了一个test函数,该函数接受模型、测试数据加载器和损失函数作为输入,并计算测试集上的损失和准确率。在函数内部,我们将模型设置为评估模式,然后使用torch.no_grad()上下文管理器禁用梯度计算。接下来,我们迭代测试数据加载器,将数据和目标转移到计算设备上,然后通过模型进行前向传播并计算损失。最后,我们统计预测正确的数量,并计算准确率。最后,在主程序中,我们加载了训练好的模型,并执行测试。