如何在 pytorch conv2d 中制作过滤器
How can I make a filter in pytorch conv2d
我是pytorch新手,一直在自己做代码卷积
为了对输入数据应用卷积,我使用了 conv2d。
在文档中,
torch.nn.Conv2d(in_channels, out_channels, kernel_size ...)
但是过滤器在哪里?要进行卷积,我们应该使用内核对输入数据进行卷积。但是只有内核大小,没有内核的元素。
例如,有一个输入数据 5x5 和 2x2 内核,所有 4 个内核的元素都是 1 那么我可以制作 4x4 输出。那么kernel的元素应该放在哪里呢?
可以使用 Conv2d
对象的 weight
参数访问过滤器权重。例如,
>>> c = torch.nn.Conv2d(in_channels=2, out_channels=2, kernel_size=3)
>>> c.weight
Parameter containing:
tensor([[[[ 0.2156, 0.0930, -0.2319],
[ 0.1333, -0.0846, 0.1848],
[ 0.0765, -0.1799, -0.1273]],
[[ 0.1173, 0.1650, -0.0876],
[-0.1353, 0.0616, -0.1136],
[-0.2326, -0.1509, 0.0651]]],
[[[-0.2026, 0.2210, 0.0409],
[-0.0818, 0.0793, 0.1074],
[-0.1430, -0.0118, -0.2100]],
[[-0.2025, -0.0508, -0.1731],
[ 0.0217, -0.1616, 0.0702],
[ 0.1903, -0.1864, 0.1523]]]], requires_grad=True)
权重默认由sampling from a uniform distribution. You can also initialize weights using various 初始化。
如果想手动改变权重,直接修改weight
参数即可。例如,要将所有权重设置为 1,请使用
>>> c.weight.data = torch.ones_like(c.weight)
>>> c.weight
Parameter containing:
tensor([[[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]],
[[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]]], requires_grad=True)
请注意,在训练期间,卷积层通常是计算图的一部分,并且它们的权重会在进行 backward()
调用时自动更新。
您可以使用 functional conv2d 函数,它需要一个额外的过滤器张量(作为参数 weights
)。
nn.Conv2d
层依赖这个操作但是自动处理filters/weights层的学习,这通常更方便
我是pytorch新手,一直在自己做代码卷积
为了对输入数据应用卷积,我使用了 conv2d。
在文档中,
torch.nn.Conv2d(in_channels, out_channels, kernel_size ...)
但是过滤器在哪里?要进行卷积,我们应该使用内核对输入数据进行卷积。但是只有内核大小,没有内核的元素。
例如,有一个输入数据 5x5 和 2x2 内核,所有 4 个内核的元素都是 1 那么我可以制作 4x4 输出。那么kernel的元素应该放在哪里呢?
可以使用 Conv2d
对象的 weight
参数访问过滤器权重。例如,
>>> c = torch.nn.Conv2d(in_channels=2, out_channels=2, kernel_size=3)
>>> c.weight
Parameter containing:
tensor([[[[ 0.2156, 0.0930, -0.2319],
[ 0.1333, -0.0846, 0.1848],
[ 0.0765, -0.1799, -0.1273]],
[[ 0.1173, 0.1650, -0.0876],
[-0.1353, 0.0616, -0.1136],
[-0.2326, -0.1509, 0.0651]]],
[[[-0.2026, 0.2210, 0.0409],
[-0.0818, 0.0793, 0.1074],
[-0.1430, -0.0118, -0.2100]],
[[-0.2025, -0.0508, -0.1731],
[ 0.0217, -0.1616, 0.0702],
[ 0.1903, -0.1864, 0.1523]]]], requires_grad=True)
权重默认由sampling from a uniform distribution. You can also initialize weights using various
如果想手动改变权重,直接修改weight
参数即可。例如,要将所有权重设置为 1,请使用
>>> c.weight.data = torch.ones_like(c.weight)
>>> c.weight
Parameter containing:
tensor([[[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]],
[[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]]], requires_grad=True)
请注意,在训练期间,卷积层通常是计算图的一部分,并且它们的权重会在进行 backward()
调用时自动更新。
您可以使用 functional conv2d 函数,它需要一个额外的过滤器张量(作为参数 weights
)。
nn.Conv2d
层依赖这个操作但是自动处理filters/weights层的学习,这通常更方便