criterion = nn.CrossEntropyLoss()
for i in range(10):
_, output = torch.max(model(x_train_tensor[i]), 0)
print(output, y_train_tensor[i])
print(criterion(output, y_train_tensor[i]))
===================================
output is:
tensor(0), tensor(0)
error: RuntimeError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
how can i fix it?
Maybe you misunderstood about nn.CrossEntropyLoss()
?
You need not take max and pass the index to the loss.
nn.CrossEntropyLoss()
expects a 2D array of logits where each row belongs to values predicted for a particular item.
1 Like
if i need classify two classes[ex. true, false], which loss function should be used? can you suggest for me?
You can use either nn.BCELoss()
or nn.CrossEntropyLoss()
.
For nn.BCELoss()
, your network shall have one output node with Sigmoid output activation.
For nn.CrossEntropyLoss()
, your network shall have two output node without any activation.
1 Like
if my DNN model’s last layer use Relu activation function, BCELoss function can not use?
I think, you should change the final node’s activation to Sigmoid if you are planning to use nn.BCELoss().
Because, 0 <= nn.ReLU(output) <= inf
and BCELoss expects probability (0 to 1).