Hi, do anybody know why it will give this error? It points at if (labels[i] == predicted[i]): .
The case I am working in is image segmentation with both my images and labels being .tiff files. And I have checked to ensure that my labels, and predicted are tensors. So I am confused as to why there is a boolean when both my labels and predicted are tensors.
‘’’ with torch.no_grad():
# accuracy of each class
n_classes_correct = [0 for i in range(self.numClass)]
n_classes_samples = [0 for i in range(self.numClass)]
cmatrix = np.zeros((self.numClass,self.numClass),np.int16)
self.model = self.model.eval()
eval_loss = 0
itera = len(self.evalloader)
for i, (images,labels) in tqdm(enumerate(self.evalloader), total=itera):
images, labels = map(lambda x:x.to(device),[images,labels])
#The output of a label should be a tensor and not a tuple, if it is, look back at your y_label output of your dataset (make sure it is a tensor or a int to be able to convert into a tensor)
outputs = self.model(images)
# overall accuracy of model
_, predicted = torch.max(outputs, 1)
self.n_samples += labels.size(0)
self.n_correct += (predicted == labels).sum().item()
# loss = self.loss_function(outputs, labels,weight=torch.FloatTensor([0.2,1.0,0.4,0]).to(device))
# eval_loss += loss.item()
# for confusion matrix later
for j, k in zip(labels.cpu().numpy().flatten(),predicted.cpu().numpy().flatten()):
cmatrix[j,k] += 1
print(images,labels,predicted)
print('\n')
print(type(predicted),type(labels))
for i in range(labels.size(0)):
print(i)
print(labels[i], predicted[i])
if (labels[i] == predicted[i]):
n_classes_correct[labels[i]] += 1
n_classes_samples[labels[i]] += 1 '''
The error message
‘’’---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
in
3 # classes = [“E_needleleaf”,“E_broadleaf”, “D_needleleaf”, “D_broadleaf”, “MixedForest”, “Closeshrublands”, “Openshrublands”, “WoodySavannas”, “Savannas”, “Grasslands”, “PermWetland”, “Cropland”, “Urban”, “VegeMosaics”, “Snow&Ice”, “Barren”, “WaterBodies”]
4 checkpoint = None
----> 5 train = trainer(imgdir= imgdir, classes = classes, reloadmode=‘same’, num_epochs = 5)
6 train
in init(self, imgdir, classes, num_epochs, reloadmode, checkpoint, bs, report)
158
159 print(’\n’+’*‘6+‘EVAL FOR ONE EPOCH’+’’*6)
–> 160 overacc = self.evali()
161
162 if self.bestAccuracy is None or overacc >= self.bestAccuracy or reloadmode == ‘different’:
in evali(self)
334 print(i)
335 print(labels[i], predicted[i])
–> 336 if (labels[i] == predicted[i]):
337 n_classes_correct[labels[i]] += 1
338 n_classes_samples[labels[i]] += 1
RuntimeError: Boolean value of Tensor with more than one value is ambiguous ‘’’