Ошибка: форма '[-1, 270000]' недопустима для ввода размером 1440000 - PullRequest
0 голосов
/ 20 июня 2019

Я получил ошибку:

фигура '[-1, 270000]' недопустима для ввода размером 1440000

при запуске моего кода для входного тензора структуры CNN размер равен 64.

Class MyNet(nn.Module):
    def __init__(self):
        super(MyNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 48, 2)
        self.conv2 = nn.Conv2d(48, 108, 2)
        self.conv3 = nn.Conv2d(108, 192, 2)
        self.conv4 = nn.Conv2d(192, 300, 2)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(300* 30* 30, 864)
        self.fc2 = nn.Linear(864, 288)
        self.fc3 = nn.Linear(288, 2)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = F.relu(self.conv3(x))
        x = F.relu(self.conv4(x))
        #x = self.pool(F.relu(self.conv4(x)))
        x = self.pool(x)
        x = x.view(-1, 300 * 30* 30)   
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return F.log_softmax(x)

Есть идеи, почему я получаю ошибку выше?

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Операция просмотра, которая должна сгладить x, вызывает эту ошибку, поскольку размер 300*30*30 не соответствует размеру активации.Скорее всего, ваш пользовательский набор данных имеет другой пространственный размер, так что представление не работает.

На основании формы, указанной в сообщении об ошибке, похоже, что ваша активация должна иметь форму [batch_size=3, channels=300, height=40, width=40], что приводит к1440000 значений.Попробуйте изменить размер входного сигнала в линейном слое на 300*40*40, например:

self.fc1 = nn.Linear(300*40*40, 864)

и уплощение до:

x = x.view(x.size(0), 300*40*40)

Пожалуйста, сообщите мне, если это не работает.

0 голосов
/ 20 июня 2019

Потому что после вашего максимального слоя пула форма карты объектов будет (300, width, height) и 300*width*height != 300*30*30.Если вы хотите изменить форму тензора, вы должны оставить то же количество элементов.

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