IndexError: Target 1 is out of bounds
When I run the program below, it gives me an error. The problem seems to be in the loss function but I can't find it. I have read the Pytorch Documentation for nn.CrossEntropyLoss but still can't find the problem.
Image size is (1 x 256 x 256),
Batch size is 1
I am new to PyTorch, thanks.
import torch
import torch.nn as nn
from PIL import Image
import numpy as np
torch.manual_seed(0)

x = np.array(Image.open(&quot;cat.jpg&quot;))
x = np.expand_dims(x, axis = 0)
x = np.expand_dims(x, axis = 0)
x = torch.from_numpy(x)
x = x.type(torch.FloatTensor) # shape = (1, 1, 256, 256)

def Conv(in_channels, out_channels, kernel=3, stride=1, padding=0):
    return nn.Conv2d(in_channels, out_channels, kernel, stride, padding)

class model(nn.Module):
    def __init__(self):
        super(model, self).__init__()

        self.sequential = nn.Sequential(
            Conv(1, 3),
            Conv(3, 5),
            nn.Flatten(),
            nn.Linear(317520, 1),
            nn.Sigmoid()
        )

    def forward(self, x):
        y = self.sequential(x)
        return y

def compute_loss(y_hat, y):
    return nn.CrossEntropyLoss()(y_hat, y)

model = model()
y_hat = model(x)

loss = compute_loss(y_hat, torch.tensor([1]))

Error:
Traceback (most recent call last):
  File &quot;D:/Me/AI/Models/test.py&quot;, line 38, in &lt;module&gt;
    **loss = compute_loss(y, torch.tensor([1]))**
  File &quot;D:/Me/AI/Models/test.py&quot;, line 33, in compute_loss
    return nn.CrossEntropyLoss()(y_hat, y)
  File &quot;D:\Softwares\Anaconda\envs\deeplearning\lib\site-packages\torch\nn\modules\module.py&quot;, line 1054, in _call_impl
    return forward_call(*input, **kwargs)
  File &quot;D:\Softwares\Anaconda\envs\deeplearning\lib\site-packages\torch\nn\modules\loss.py&quot;, line 1120, in forward
    return F.cross_entropy(input, target, weight=self.weight,
  File &quot;D:\Softwares\Anaconda\envs\deeplearning\lib\site-packages\torch\nn\functional.py&quot;, line 2824, in cross_entropy
    return torch._C._nn.cross_entropy_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index)
**IndexError: Target 1 is out of bounds.**

Process finished with exit code 1



This looks like a binary classifier model: cat or not cat. But you are using CrossEntropyLoss which is used when you have more than 2 target classes. So what you should use is Binary Cross Entropy Loss.
def compute_loss(y_hat, y):
    return nn.BCELoss()(y_hat, y)

