Python 步幅误差

Python 步幅误差,python,pytorch,stride,convolutional-neural-network,Python,Pytorch,Stride,Convolutional Neural Network,我现在在windows中使用pytorch 0.4.0构建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

我现在在windows中使用pytorch 0.4.0构建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]

我想这表明我在上面的代码中犯了一些错误,但我不知道如何修复它,有人能帮我吗?提前谢谢

好吧,也许我知道发生了什么,因为我在4或5个小时前遇到了相同的运行时错误

以下是我的解决方案(我自己定义了数据集):

我输入网络的图像是1个通道,与您的代码相同(
self.conv1=nn.Conv2d(in_channels=1,…)
)。会导致运行时错误的镜像属性如下:

错误\u img

我修复的图像如下所示:

固定\u img

你能感觉到不同吗?输入图像的通道应该是1,因此
img.shape()
应该是tuple!使用
img.reformate(1100100)
修复它,网络的转发功能将继续


我希望它能帮助您。

原因之一可能是
输入
馈送到模型进行处理<代码>输入必须缺少一个维度


请尝试

何时产生错误?我无法复制它,无论是在向前还是向后传递中。在保存模型并重新加载后,我遇到了相同的问题(Anaconda、Python 3.6、pytorch 0.4.0)。好吧,对我来说,在输入单个项目时,它缺少批次维度。请参阅。我发现这是因为我的输入数据类型,我的数据应该是DoubleTensor,但我将其用作FloatTensor,而且当维度不匹配时,也会发生此错误。回答并接受您自己的问题是完全正确的,顺便说一句,这可能对未来的读者有所帮助。:)不要将问题作为主题发布到问题answer@stackfan谢谢你的建议。