I'm practicing code that implements the "Auto-Encoding Variable Bayes (VAE)" paper. However, the error "RuntimeError:shape [16, 1, 28, 28] is invalid for input of size 37632" has not been resolved. I don't know how to solve it. Please help me. EPOCHS = 50 BATCH_SIZE = 16 # Transformer code transformer = transforms.Compose([ transforms.Resize((28, 28)), transforms.ToTensor() ]) # Transform data train_set = torchvision.datasets.ImageFolder(root = "/home/seclab_dahae/dahye/VAE_data", transform = transformer) train_set, test_set = train_test_split(train_set, test_size=0.2) print("Train size is {}, test size is {} ".format(len(train_set), len(test_set))) #test_set = torchvision.datasets.ImageFolder(root = "/home/seclab_dahae/dahye/VAE_data", transform = transformer) # Loading trainloader, testloader trainloader = torch.utils.data.DataLoader(train_set, batch_size = BATCH_SIZE, shuffle = True, num_workers = 2) testloader = torch.utils.data.DataLoader(test_set, batch_size = BATCH_SIZE, shuffle = True, num_workers = 2) This is the code that brings my data to pytorch. # VAE model class VAE(nn.Module): def __init__(self, image_size, hidden_size_1, hidden_size_2, latent_size): #28*28, 512, 256, 2 super(VAE, self).__init__() self.fc1 = nn.Linear(image_size, hidden_size_1) self.fc2 = nn.Linear(hidden_size_1, hidden_size_2) self.fc31 = nn.Linear(hidden_size_2, latent_size) self.fc32 = nn.Linear(hidden_size_2, latent_size) self.fc4 = nn.Linear(latent_size, hidden_size_2) self.fc5 = nn.Linear(hidden_size_2, hidden_size_1) self.fc6 = nn.Linear(hidden_size_1, image_size) def encode(self, x): h1 = F.relu(self.fc1(x)) h2 = F.relu(self.fc2(h1)) return self.fc31(h2), self.fc32(h2) def reparameterize(self, mu, logvar): std = torch.exp(0.5 * logvar) eps = torch.randn_like(std) return mu + std * eps def decode(self, z): h3 = F.relu(self.fc4(z)) h4 = F.relu(self.fc5(h3)) return torch.sigmoid(self.fc6(h4)) def forward(self, x): mu, logvar = self.encode(x.view(-1, 784)) z = self.reparameterize(mu, logvar) return self.decode(z), mu, logvar VAE_model = VAE(28*28, 512, 256, 2).to(DEVICE) optimizer = optim.Adam(VAE_model.parameters(), lr = 1e-3) This is the part that implements the VAE model. def loss_function(recon_x, x, mu, logvar): BCE = F.binary_cross_entropy(recon_x, x.view(-1, 784), reduction = 'sum') KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()) return BCE, KLD Here is a code that implements a loss function. def train(epoch, model, train_loader, optimizer): model.train() train_loss = 0 for batch_idx, (data, _) in enumerate(train_loader): data = data.to(DEVICE) optimizer.zero_grad() recon_batch, mu, logvar = model(data) BCE, KLD = loss_function(recon_batch, data, mu, logvar) loss = BCE + KLD loss.backward() train_loss += loss.item() optimizer.step() if batch_idx % 100 == 0: print('Train Epoch: {} [{}/{} ({:.0f}%)]\t Loss: {:.6f}'.format( epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader), loss.item() / len(data))) print("======> Epoch: {} Average loss: {:.4f}".format( epoch, train_loss / len(train_loader.dataset) )) def test(epoch, model, test_loader): model.eval() test_loss = 0 with torch.no_grad(): for batch_idx, (data, _) in enumerate(test_loader): data = data.to(DEVICE) recon_batch, mu, logvar = model(data) BCE, KLD = loss_function(recon_batch, data, mu, logvar) loss = BCE + KLD test_loss += loss.item() if batch_idx == 0: n = min(data.size(0), 8) comparison = torch.cat([data[:n], recon_batch.view(BATCH_SIZE, 1, 28, 28)[:n]]) # (16, 1, 28, 28) grid = torchvision.utils.make_grid(comparison.cpu()) # (3, 62, 242) This is the train code and test code. Jupiter's error occurred in the "recon_batch.view(BATCH_SIZE, 1, 28, 28)[:n]" section of the test code. for epoch in tqdm(range(0, EPOCHS)): train(epoch, VAE_model, trainloader, optimizer) test(epoch, VAE_model, testloader) print("\n") latent_to_image(epoch, VAE_model) Finally, This code is a trigger to start learning. How can I solve this error? Continue reading...