Ошибка измерения изображения в автоконкодере Convolution - PullRequest
0 голосов
/ 10 октября 2018

У меня есть следующие настройки сверточного автоэнкодера:

class autoencoder(nn.Module):
def  __init__(self):
    super(autoencoder, self).__init__()
    self.encoder = nn.Sequential(
        nn.Conv2d(1, 16, 3, stride=3, padding=1),  # b, 16, 10, 10
        nn.ReLU(True),
        nn.MaxPool2d(2, stride=2),  # b, 16, 5, 5
        nn.Conv2d(16, 8, 3, stride=2, padding=1),  # b, 8, 3, 3
        nn.ReLU(True),
        nn.MaxPool2d(2, stride=1)  # b, 8, 2, 2                     
                                )

    self.decoder = nn.Sequential(
        nn.ConvTranspose2d(8, 16, 3, stride=2),  # b, 16, 5, 5
        nn.ReLU(True),
        nn.ConvTranspose2d(16, 8, 5, stride=3, padding=1),  # b, 8, 15, 15
        nn.ReLU(True),
        nn.ConvTranspose2d(8, 1, 2, stride=2, padding=1),  # b, 1, 28, 28
        nn.Tanh()          
                                )

Это основной цикл:

for epoch in range(epochs):
running_loss = 0
for data in (train_loader):
    image,_=data
    inputs = image.view(image.size(0),-1)
    optimizer.zero_grad()
    #image = np.expand_dims(img, axis=0)

    outputs = net(inputs)
    loss = criterion(outputs,inputs)
    loss.backward()
    optimizer.step()
    running_loss += loss.data[0]
print('At Iteration : %d   ;  Mean-Squared Error : %f'%(epoch + 1,running_loss/(train_set.train_data.size(0)/batch_size)))

Это ошибка:

RuntimeError: Expected 4-dimensional input for 4-dimensional weight [16, 1, 3, 3], but got input of size [1000, 784] instead

Этоимеет какое-то отношение к сглаживанию изображения, но я не совсем уверен, как его растоптать.

1 Ответ

0 голосов
/ 11 октября 2018

Почему вы "сглаживаете" входное изображение (2-я строка основного цикла):

inputs = image.view(image.size(0),-1)

Эта строка превращает ваши 4-мерные image (пакет - каналы - высота - ширина) в дваразмерный «плоский» вектор (пакет - c * h * w).
You autoencoder ожидает, что его входные данные будут 4D, а не "плоскими".просто удали эту строку, и с тобой все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...