input = torch.randn(8, 3, 50, 100)m = nn.Conv2d(3, 3, kernel_size=(3, 3), padding=(1, 1))m2 = nn.Conv2d(3, 3, kernel_size=3, padding=1)output = m(input)output2 = m2(input)torch.equal(output, output2) >> False
我认为上面m和m2的Conv2d应该有完全相同的输出值,但实际上并非如此,原因是什么?
回答:
您确实初始化了两个具有相同设置的nn.Conv2d
。然而,权重的初始化是随机进行的!这里您有两个不同的层m
和m2
。具体来说,m.weight
和m2.weight
的组件不同,m.bias
和m2.bias
也是如此。
要获得相同的结果,一种方法是复制模型的基础参数:
>>> m.weight = m2.weight>>> m.bias = m2.bias
这样,当然会导致torch.equal(m(input), m2(input))
为True
。