Hi,
I have read some of the issues similar to mine but I am still struggling to understand why I am getting this issue.
I have built an autoencoder essentially inspired by this: Autoencoder and Classification inside the same model 1
I plan on using this on 3 classes eventually, although testing it on 2 at the moment.
"""
Autoencoder class

"""
import torch
import torch.nn as nn

class AutoEncoder(nn.Module):
    def __init__(self, n_embedded):
        super(AutoEncoder, self).__init__()
        self.encoder = nn.Sequential(
            nn.Linear(6144, n_embedded))
        self.decoder = nn.Sequential(nn.Linear(n_embedded, 6144))
        self.classifier = nn.Sequential(
            nn.Linear(n_embedded, 2), nn.Softmax()
        )
    def forward(self, x):
        encoded = self.encoder(x)
        decoded = self.decoder(encoded)
        out = self.classifier(encoded)
        return decoded, out


I also train the autoencoder something along the lines of this:
for epoch in range(args.start_epoch, args.num_epochs+1):
        print('Epoch {}/{}'.format(epoch, args.num_epochs))
        print('-' * 100)

        losses1=[]
        # https://discuss.pytorch.org/t/autoencoder-and-classification-inside-the-same-model/36248

        for i, (inputs, labels) in enumerate(dataloaders_dict['train']):
            inputs = inputs.to(device)
            inputs = torch.squeeze(inputs)
            labels = labels.to(device)
            print(labels)
            optimizer.zero_grad()
            # ===================forward=====================
            decoded, out = model(inputs)
  
            loss1 = criterion1(decoded, inputs)
            loss2 = criterion2(out, labels).item()

            # ===================backward====================

            loss = loss1 + loss2
            loss.backward()
            optimizer.step()

            save_checkpoint(model, epoch, optimizer, criterion, args.checkpoint, args.best, is_best=True)


Where my inputs are in the shape of torch.Size([3, 1, 6144, 1, 1]) with the first dimension representing the batch size. After squeezing to fit into the autoencoder, we get torch.Size([3, 6144]). Apart from the last batch which gets torch.Size([6144]).
The size of the labels with a batch size of three in a dataset of 34 (for testing out purposes), that are fed into the classifier is:
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([3])
torch.Size([1])


Printing out both out.shape and labels.shape (what I feed into loss2):
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([3, 2]) torch.Size([3])
torch.Size([2]) torch.Size([1])


Training with loss 1 appears to be fine, however, when I train with loss2, I receive:
Epoch 0/10
----------------------------------------------------------------------------------------------------
/anaconda3/lib/python3.6/site-packages/torch/nn/modules/container.py:92: UserWarning: Implicit dimension choice for softmax has been deprecated. Change the call to include dim=X as an argument.
  input = module(input)
Traceback (most recent call last):
  File "train_auto.py", line 147, in <module>
    main()
  File "train_auto.py", line 38, in main
    run(args)
  File "train_auto.py", line 125, in run
    loss2 = criterion2(out, labels).item()
  File "/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 541, in __call__
    result = self.forward(*input, **kwargs)
  File "/anaconda3/lib/python3.6/site-packages/torch/nn/modules/loss.py", line 916, in forward
    ignore_index=self.ignore_index, reduction=self.reduction)
  File "/anaconda3/lib/python3.6/site-packages/torch/nn/functional.py", line 2009, in cross_entropy
    return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
  File "/anaconda3/lib/python3.6/site-packages/torch/nn/functional.py", line 1317, in log_softmax
    ret = input.log_softmax(dim)
IndexError: Dimension out of range (expected to be in range of [-1, 0], but got 1)

I’m not sure why. I feel like the batches match for the new output and original labels.