RuntimeError: форма «[-1, 784]» недопустима для ввода размера 614400.Python

Программы на Python
Ответить
Anonymous
 RuntimeError: форма «[-1, 784]» недопустима для ввода размера 614400.

Сообщение Anonymous »

Я практикуюсь в коде, реализующем документ «Автоматическое кодирование переменных Байеса (VAE)».
Однако ошибка «RuntimeError:shape [16, 1, 28, 28] недопустима для ввода размера. 37632» не решена. Я не знаю, как это решить. Пожалуйста, помогите мне.

Код: Выделить всё

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)
Это код, который переносит мои данные в 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)
Это та часть, которая реализует модель VAE.

Код: Выделить всё

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
Вот код, реализующий функцию потерь.

Код: Выделить всё

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)
Это код поезда и тестовый код.
Ошибка Юпитера произошла в разделе «recon_batch.view(BATCH_SIZE, 1, 28, 28)[:n]» раздела тестовый код.

Код: Выделить всё

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)
Наконец, этот код является триггером для начала обучения.
Как устранить эту ошибку?

Подробнее здесь: https://stackoverflow.com/questions/715 ... ize-614400
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»