验证torch中卷积和反卷积的计算
程序员文章站
2023-12-31 17:18:58
...
1、卷积运算和代码示例
一个简单的例子,我们给一个等待这被卷积的矩阵
再给一个简单的卷积核为
不设置padding
,并且stride=1
,我们可以简单的计算得到
在torch中就是如此计算的
model = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=2,stride=1,padding=0)
x = torch.tensor([[[1,2,3],[4,5,6],[7,8,9]]]).unsqueeze(0)
model.weight.data = torch.tensor([[[[1,1],[1,1]]]])
model.bias.data = torch.zeros(1)
model(x)
结果可以看见为
tensor([[[[12, 16],
[24, 28]]]], grad_fn=<ThnnConv2DBackward>)
2、反卷积运算和代码示例
假设我们对
进行反卷积,padding=0,stride=1
,卷积核为
这等价于对(见下面解释)
进行卷积操作。结果应该为
看下pytorch计算结果
model = nn.ConvTranspose2d(in_channels=1, out_channels=1, kernel_size=3,stride=1,padding=0)
x = torch.tensor([[[12,16],[24,28]]], dtype=torch.float32).unsqueeze(0)
model.weight.data = torch.tensor([[[[1,1,1],[1,1,1],[1,1,1]]]], dtype=torch.float32)
model.bias.data = torch.zeros(1)
print(model(x))
结果为
tensor([[[[12., 28., 28., 16.],
[36., 80., 80., 44.],
[36., 80., 80., 44.],
[24., 52., 52., 28.]]]], grad_fn=<SlowConvTranspose2DBackward>)
提一下计算方式
第一行是4->2的卷积过程,第二行是6->4的卷积过程。
反卷积是2->4的的过程
所以这里,有。我们的输入x 就是第一行的o, 也就是第二行的,为2
通过消去,我们可以得到
所以才有的矩阵(1)