title: Pytorch: multi-target error with CrossEntropyLoss
body: <p>So I was training a Conv. Neural Network. Following are the essential details:</p>
  
  <ul>
  <li>original label dim  = torch.Size([64, 1])</li>
  <li>output from the net dim = torch.Size([64, 2])</li>
  <li>loss type = nn.CrossEntropyLoss()</li>
  <li>error = RuntimeError: multi-target not supported at /pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:15</li>
  </ul>
  
  <p><strong>WHERE AM I WRONG..?</strong></p>
  
  <p><strong>training:</strong></p>
  
  <pre><code>EPOCHS        = 5
  LEARNING_RATE = 0.0001
  BATCH_SIZE    = 64
  
  net = Net().to(device)
  optimizer = optim.Adam(net.parameters(), lr=LEARNING_RATE)
  
  loss_log = []
  loss_log = train(net, trainSet, loss_log, EPOCHS, LEARNING_RATE, BATCH_SIZE)
  </code></pre>
  
  <p><strong>train function:</strong></p>
  
  <pre><code>def train(net, train_set, loss_log=[], EPOCHS=5, LEARNING_RATE=0.001, BATCH_SIZE=32):
    print('Initiating Training..')  
    loss_func = nn.CrossEntropyLoss()
  
    # Iteration Begins
    for epoch in tqdm(range(EPOCHS)):
      # Iterate over every sample in the batch
      for data in tqdm(trainSet, desc=f'Iteration &gt; {epoch+1}/{EPOCHS} : ', leave=False):
          x, y = data
          net.zero_grad()
  
          #Compute the output
          output, sm = net(x)
  
          # Compute Train Loss
          loss = loss_func(output, y.to(device))
  
          # Backpropagate
          loss.backward()
  
          # Update Parameters
          optimizer.step()
  
          # LEARNING_RATE -= LEARNING_RATE*0.0005
  
      loss_log.append(loss)
      lr_log.append(LEARNING_RATE)
  
    return loss_log, lr_log
  </code></pre>
  
  <p><strong>FULL ERROR:</strong></p>
  
  <pre><code>---------------------------------------------------------------------------
  
  RuntimeError                              Traceback (most recent call last)
  
  &lt;ipython-input-20-8deb9a27d3b4&gt; in &lt;module&gt;()
       13 
       14 total_epochs += EPOCHS
  ---&gt; 15 loss_log = train(net, trainSet, loss_log, EPOCHS, LEARNING_RATE, BATCH_SIZE)
       16 
       17 plt.plot(loss_log)
  
  4 frames
  
  &lt;ipython-input-9-59e1d2cf0c84&gt; in train(net, train_set, loss_log, EPOCHS, LEARNING_RATE, BATCH_SIZE)
       21         # Compute Train Loss
       22         # print(output, y.to(device))
  ---&gt; 23         loss = loss_func(output, y.to(device))
       24 
       25         # Backpropagate
  
  /usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
      530             result = self._slow_forward(*input, **kwargs)
      531         else:
  --&gt; 532             result = self.forward(*input, **kwargs)
      533         for hook in self._forward_hooks.values():
      534             hook_result = hook(self, input, result)
  
  /usr/local/lib/python3.6/dist-packages/torch/nn/modules/loss.py in forward(self, input, target)
      914     def forward(self, input, target):
      915         return F.cross_entropy(input, target, weight=self.weight,
  --&gt; 916                                ignore_index=self.ignore_index, reduction=self.reduction)
      917 
      918 
  
  /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in cross_entropy(input, target, weight, size_average, ignore_index, reduce, reduction)
     2019     if size_average is not None or reduce is not None:
     2020         reduction = _Reduction.legacy_get_string(size_average, reduce)
  -&gt; 2021     return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
     2022 
     2023 
  
  /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in nll_loss(input, target, weight, size_average, ignore_index, reduce, reduction)
     1836                          .format(input.size(0), target.size(0)))
     1837     if dim == 2:
  -&gt; 1838         ret = torch._C._nn.nll_loss(input, target, weight, _Reduction.get_enum(reduction), ignore_index)
     1839     elif dim == 4:
     1840         ret = torch._C._nn.nll_loss2d(input, target, weight, _Reduction.get_enum(reduction), ignore_index)
  
  RuntimeError: multi-target not supported at /pytorch/aten/src/THCUNN/generic/ClassNLLCriterion.cu:15
  </code></pre>