在 pytorch 中显示错误分类的图像



我是pytorch和numpy的新手,所以这可能是一个愚蠢的问题。我希望看到一些被我的网络错误分类的图像,具有正确的标签和预测的标签。这是我的代码

valid_and_test_set = torchvision.datasets.MNIST("./mnist", train=False, download=True)
dataset_valid, dataset_test = torch.utils.data.random_split(valid_and_test_set,[5000, 5000])
dataset_test.dataset.transform = transform #transform is composed by unsqueeze, normalize, view and gaussian noise with randn
dataset_test.dataset.target_transform = OneHot() #OneHot return the label
dataloader_test = torch.utils.data.DataLoader(dataset_test.dataset, batch_size=5000, num_workers=num_workers, pin_memory=True)
def test(dataset, dataloader):
net.eval()  
with torch.no_grad():
for batch in dataloader:
inputs = batch[0]
inputs = inputs.to(device, non_blocking=True)
outputs = net(inputs)
predictions = torch.argmax(outputs, dim=1)
return predictions

提前谢谢你

至少有两种方法可以做到这一点。

一种是,存储评估期间错误分类的图像(运行测试数据(并绘制这些图像。此处显示

另一种方法是使用TensorBoard。在我看来,这是相当优雅的,你可以在这里找到一个全面的指南

def test(dataset, dataloader):
net.eval()
with torch.no_grad():
for batch in dataloader:
inputs = batch[0]
label=batch[1]
inputs = inputs.to(device, non_blocking=True)
outputs = net(inputs)
predictions = torch.argmax(outputs, dim=1)
for sampleno in range(batch[0].shape[0]):
if(label[sampleno]!=predictions[sampleno]):
print("Actual Lable")
print(label[sampleno])
print("Predicted Label")
print(predictions[sampleno])
showimg(inputs[sampleno].cpu())
return predictions

你可以像这样编写 showing(( 函数

def showimg(model):
model=np.reshape(model.numpy(),[28,28]) # For 1D Vector

#If you normalize the image then use Next three-line
#Otherwise skip that
mean=np.array([0.485, 0.456, 0.406] )
std=np.array([0.229, 0.224, 0.225])
model=(model*std+mean)


#print(model)
cv2.imshow("ABC", model)

#waits for user to press any key
#(this is necessary to avoid Python kernel form crashing)
cv2.waitKey(0)
#closing all open windows
cv2.destroyAllWindows()

我收到此错误,不知道这意味着什么

ValueError                                Traceback (most recent call last)
in 
288 
289         # test on validation
--> 290         predictions = test(dataset_valid, dataloader_valid)
291         accuracy_valid = 100. * predictions.eq(dataset_valid.dataset.targets[dataset_valid.indices].to(device)).sum().float() / len(dataset_valid)
292 
in test(dataset, dataloader)
236                     print("Predicted Label")
237                     print(predictions[sampleno])
--> 238                     showimages(inputs[sampleno].cpu())
239             return predictions
240 
in showimages(model)
240 
241 def showimages(model):
--> 242     model=np.transpose(model.numpy(),(1,2,0))
243 
244     
<__array_function__ internals> in transpose(*args, **kwargs)
~/.local/lib/python3.7/site-packages/numpy/core/fromnumeric.py in transpose(a, axes)
649 
650     """
--> 651     return _wrapfunc(a, 'transpose', axes)
652 
653 
~/.local/lib/python3.7/site-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
59 
60     try:
---> 61         return bound(*args, **kwds)
62     except TypeError:
63         # A TypeError occurs if the object does have such a method in its
ValueError: axes don't match array

最新更新