Numpy 在pytorch中显示错误分类的图像
我是pytorch和numpy的新手,所以这可能是个愚蠢的问题。我希望看到一些图像被我的网络错误分类,带有正确的标签和预测的标签。这是我的密码Numpy 在pytorch中显示错误分类的图像,numpy,matplotlib,pytorch,tensorboard,Numpy,Matplotlib,Pytorch,Tensorboard,我是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,[5
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
提前感谢您您至少可以通过两种方式来完成此操作 一种是,存储评估过程中错误分类的图像(运行测试数据)并绘制这些图像。如图所示 另一种方法是利用张力板。在我看来,这是相当优雅的,你可以找到一个全面的指南 可以这样编写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
ValueError回溯(最近一次调用)
在里面
288
289#验证测试
-->290预测=测试(数据集有效,数据加载器有效)
291精度\u有效=100。*predictions.eq(dataset_valid.dataset.targets[dataset_valid.index].to(device)).sum().float()/len(dataset_valid)
292
测试中(数据集、数据加载器)
236打印(“预测标签”)
237打印(预测[sampleno])
-->238显示图像(输入[sampleno].cpu())
239返回预测
240
在showimages(模型)中
240
241 def showimages(型号):
-->242 model=np.transpose(model.numpy(),(1,2,0))
243
244
转置(*args,**kwargs)
转置中的~/.local/lib/python3.7/site-packages/numpy/core/fromneric.py(a,轴)
649
650 """
-->651返回(a,‘转置’,轴)
652
653
wrapfunc中的~/.local/lib/python3.7/site-packages/numpy/core/fromneric.py(obj,method,*args,**kwds)
59
60次尝试:
--->61返回边界(*args,**kwds)
62除类型错误外:
63#如果对象中确实有这样的方法,则会发生类型错误
ValueError:轴与阵列不匹配
train函数中的“数据”变量是什么?修改了该变量。您的input
和input[sampleno]
的大小是多少?torch.size([5000784])和torch.size([784])。问题是这是灰度,您使用的是RGB(我想)现在好了,我为3D阵列(RGB图像)做了这件事但是在你的例子中,输入是一个向量,我已经修改了我的答案。我想这一次它会工作的。几乎完成了,我在plt.imshow上得到了一个无效形状的错误(1,28,28)(我不得不使用它,因为我在Debian上使用OpenCV有问题)在使用plt.inshow
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