'How to fix "ValueError: Expected input batch_size (1) to match target batch_size (4)."?

I'm training a pytorch neural network on google colab to classify sign langauge alphabets of 29 classes in total.

We've been fixing the code by changing various params but it won't work anyway.

    transform = transforms.Compose([

        #gray scale


        #converting to tensor

        transforms.Normalize( (0.1307,), (0.3081,)),

    data_dir = 'data/train/asl_alphabet_train'

    full_dataset = datasets.ImageFolder(root=data_dir, transform=transform)

    #train & test 
    train_size = int(0.8 * len(full_dataset))
    test_size = len(full_dataset) - train_size

    train_dataset, test_dataset = torch.utils.data.random_split(full_dataset, [train_size, test_size])

    trainloader = torch.utils.data.DataLoader(train_dataset , batch_size = 4, shuffle = True )
    testloader = torch.utils.data.DataLoader(test_dataset , batch_size = 4, shuffle = False )

    #neural net architecture
  (conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (conv3): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
  (fc1): Linear(in_features=32768, out_features=128, bias=True)
  (fc2): Linear(in_features=128, out_features=29, bias=True)
  (dropout): Dropout(p=0.5)

    loss_fn = nn.CrossEntropyLoss()
    opt = optim.SGD(model.parameters(), lr=0.01)
    def train(model, train_loader, optimizer, loss_fn, epoch, device):
        #telling pytorch that training mode is on
        loss_epoch_arr = []

        for e in range(epoch):

            # bach_no, data, target
            for batch_idx, (data, target) in enumerate(train_loader):

                #moving to GPU
                #data, target = data.to(device), target.to(device)

                #Making gradints zero

                #generating output
                output = model(data)

                #calculating loss
                loss = loss_fn(output, target)

                #backward propagation

                #stepping optimizer

                #printing at each 10th epoch
                if batch_idx % 10 == 0:
                    print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                        epoch, batch_idx * len(data), len(train_loader.dataset),
                        100. * batch_idx / len(train_loader), loss.item()))

                #de-allocating memory
                del data,target,output

            #appending values

        #plotting loss

    train(model, trainloader , opt, loss_fn, 10, device)

ValueError: Expected input batch_size (1) to match target batch_size (4).

We're beginners in pytorch and trying to figure out what the problem is.

Solution 1:[1]

The most likely cause of this error relates to the value of in_features within the nn.Linear function You haven't provided your full code for this.

One way to check for this is to add the following lines to you forward function (before x.view:


The result will be of the form [a,b,c,d]. in_features value should be equal to b*c*d


This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Electromagnet