基本上这是VGG-16模型,我进行了迁移学习和微调模型,两周前我训练了这个模型并发现测试和训练精度都不错,但现在我需要模型的类别精度。我正在尝试找出混淆矩阵,并希望绘制该矩阵。 训练代码:
# Training the model again from the last CNN Block to The End of the Network
dataset = 'C:\\Users\\Sara Latif Khan\\OneDrive\\Desktop\\FYP_\\Scene15\\15-Scene'
model = model.to(device)
optimizer = Adam(filter(lambda p: p.requires_grad, model.parameters()))
#Training Fixed Feature Extractor for 15 epochs
num_epochs = 5
batch_loss = 0
cum_epoch_loss = 0 #cumulative loss for each batch
for e in range(num_epochs):
cum_epoch_loss = 0
for batch, (images, labels) in enumerate(trainloader,1):
images = images.to(device)
labels = labels.to(device)
optimizer.zero_grad()
logps = model(images)
loss = criterion(logps, labels)
loss.backward()
optimizer.step()
batch_loss += loss.item()
print(f'Epoch({e}/{num_epochs} : Batch number({batch}/{len(trainloader)}) : Batch loss : {loss.item()}')
torch.save(model, dataset+'_model_'+str(e)+'.pt')
print(f'Training loss : {batch_loss/len(trainloader)}')
这是我使用的代码,用于基于测试装载器中的数据检查模型的准确性。
model. to('cpu')
model.eval()
with torch.no_grad():
num_correct = 0
total = 0
#set_trace ()
for batch, (images,labels) in enumerate(testloader,1):
logps = model(images)
output = torch.exp(logps)
pred = torch.argmax(output,1)
total += labels.size(0)
num_correct += (pred==labels).sum().item()
print(f'Batch ({batch} / {len(testloader)})')
# to check the accuracy of model on 5 batches
# if batch == 5:
# break
print(f'Accuracy of the model on {total} test images: {num_correct * 100 / total }% ')
接下来,我需要找到模型的类别准确率。 我正在使用Jupyter笔记本工作。 我应该重新加载保存的模型并找到混淆矩阵,还是有其他更合适的方法。