I am getting the above error after 85% completion.
I am using a different dataset than dogscat which has six classes. I was able to train and save the weights. Other analysis functions are running fine except the accuracy function. Any pointer would be helpful
Hi, @aloksaan
First, I’m curious about why np.mean
is applied to np.exp(log_preds)
.
This problem is due to that PyTorch operations cannot handle numpy arrays directly, and there is a specific function torch.from_numpy
.
I think the problem is that probs
is calculated by np.mean(np.exp(log_preds), 0)
in the In [64]
cell (do we really need np.mean
?).
To make the cell work, use torch
functions instead of numpy
ones like this:
log_preds, y = learn.TTA()
probs = torch.mean(torch.exp(log_preds), 0)
accuracy(probs, y)
I think the accuracy
function will work with log_preds
and y
because exp
does not change the order of values in the array.
Thanks @crcrpar,
I have not modified the original code. I was only running the original notebook with a new dataset. Btw i tried torch.mean and now it throws
TypeError Traceback (most recent call last)
in ()
1 log_preds,y = learn.TTA()
2 #probs = np.mean(np.exp(log_preds),0)
----> 3 probs = torch.mean(torch.exp(log_preds), 0)
4 accuracy(probs,y)
TypeError: torch.exp received an invalid combination of arguments - got (numpy.ndarray), but expected (torch.FloatTensor source)
Sorry to bother you.
Then, there’s a need to convert preds to torch.tensor before pass it to accuracy function, because log_preds is numpy.ndarray whom torch.exp cannot handle.
How about this
log_preds, y = learn.TTA()
preds = np.mean(np.exp(log_preds), 0)
preds = torch.from_numpy(preds)
accuracy (preds, y)
Thank you. Really appreciate your quick response. We are supposed to use accuracy_np and not accuracy. The underneath metric.py was updated but the notebook never got updated. Here is the code snippet below
def accuracy_np(preds, targs):
preds = np.argmax(preds, 1)
return (preds==targs).mean()
def accuracy(preds, targs):
preds = torch.max(preds, dim=1)[1]
return (preds==targs).float().mean()
Glad to hear that and appreciate your sharing the snippet!