我现在在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]
我认为这表明我在上面的代码中犯了一些错误,但我不知道如何修复它,任何人都可以帮助我吗?提前谢谢!
答案 0 :(得分:1)
很好,也许我知道发生了什么,因为我在4或5小时前遇到了相同的运行时错误。
这是我的解决方案(我自己定义了数据集):
我输入网络的图片是1个频道,与您的代码(self.conv1 = nn.Conv2d(in_channels=1,...)
)相同。并且会带来运行时错误的图像属性如下:
<强> error_img 强>
我修复的图像如下:
<强> fixed_img 强>
你能感觉到区别吗?输入图像的通道应为1,因此img.shape()
应该是元组!使用img.reshape(1,100,100)
来修复它,网络的前向功能将继续。
我希望它可以帮到你。
答案 1 :(得分:0)
原因之一可能是 Instrumentation instrumentation = ByteBuddyAgent.install();
CtClass ctClass = ClassPool.getDefault().getCtClass(Main.class.getCanonicalName());
ctClass.defrost(); // as this class is already loaded, javassist tries to protect it.
CtMethod execute = ctClass.getDeclaredMethod("execute");
execute.setBody("{System.out.println(\"hello world\");}");
ClassDefinition classDefinition = new ClassDefinition(Main.class, ctClass.toBytecode());
instrumentation.redefineClasses(classDefinition);
被馈送到模型进行处理; input
必须缺少以下维度之一。