使用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()上下文管理器禁用梯度计算。接下来,我们迭代测试数据加载器,将数据和目标转移到计算设备上,然后通过模型进行前向传播并计算损失。最后,我们统计预测正确的数量,并计算准确率。最后,在主程序中,我们加载了训练好的模型,并执行测试。
