ошибка шага pytorch cnn

Сейчас я использую pytorch 0.4.0 в Windows для создания CNN, и вот мой код:

class net(nn.Module):
    def __init__(self):
        super(net, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=(1,3),stride=1 )

        self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=(1,3), stride=1)

        self.dense1 = nn.Linear(32 * 28 * 24, 60)
        self.out = nn.Linear(60,3)

    def forward(self, input):
        x = F.relu(self.conv1(input))
        x = F.relu(self.conv2(x))
        x = x.view(x.size(0), -1) # flatten(batch,32*7*7)
        x = self.dense1(x)
        output = self.out(x)
        return output

но я получаю ошибку, что

File "D:\Anaconda\lib\site-packages\torch\nn\modules\conv.py", line 301, in forward
    self.padding, self.dilation, self.groups)

RuntimeError: expected stride to be a single integer value or a list of 1 values to match the convolution dimensions, but got stride=[1, 1]

Я думаю, это показывает, что я допустил некоторые ошибки в приведенном выше коде, но я не знаю, как это исправить, может ли кто-нибудь мне помочь? Заранее спасибо!


person Ddj    schedule 28.04.2018    source источник
comment
Когда выдается ваша ошибка? Я не могу воспроизвести его ни в прямом, ни в обратном проходе.   -  person McLawrence    schedule 29.04.2018
comment
У меня такая же проблема (Anaconda, Python 3.6, pytorch 0.4.0) после сохранения модели и ее перезагрузки.   -  person sunside    schedule 30.04.2018
comment
Итак, для меня отсутствовало измерение партии, когда я кормил один элемент. См. это.   -  person sunside    schedule 01.05.2018
comment
Я обнаружил, что из-за моего типа входных данных мои данные должны быть DoubleTensor, но я использовал их как FloatTensor, и когда размерность не совпадает, возникает эта ошибка.   -  person Ddj    schedule 01.05.2018
comment
Совершенно нормально ответить и принять свой собственный вопрос, кстати, это может помочь будущим читателям. :)   -  person sunside    schedule 02.05.2018


Ответы (2)


Хорошо, может быть, я знаю, что происходит, потому что я столкнулся с той же ошибкой во время выполнения всего 4 или 5 часов назад.

Вот мое решение в моем случае (я сам определил набор данных):

Изображение, которое я загружаю в сеть, имеет 1 канал, как и ваш код (self.conv1 = nn.Conv2d(in_channels=1,...)). И атрибут изображения, который может привести к ошибке времени выполнения, выглядит следующим образом:

ошибка_изображения

введите здесь описание изображения

Изображение, которое я исправил, выглядит следующим образом:

фиксированное_изображение

введите здесь описание изображения

Вы чувствуете разницу? Канал входного изображения должен быть 1, поэтому img.shape() должен быть кортежем! Используйте img.reshape(1,100,100), чтобы исправить это, и функция пересылки сети будет продолжена.

Я надеюсь, что это может помочь вам.

person LeLeJ    schedule 07.05.2018
comment
не размещать вопрос на вопрос в качестве ответа - person coder; 07.05.2018
comment
@stackfan Edited.Thx за ваше предложение. - person LeLeJ; 07.05.2018

Одной из причин может быть input, переданный в модель для обработки; input должно отсутствовать одно из измерений.

Попробуйте torch.unsqueeze(input, 0)

person imflash217    schedule 20.07.2018