gpt4 book ai didi

convolution - 如何在 PyTorch conv2d 函数中使用组参数

转载 作者:行者123 更新时间:2023-12-04 14:23:26 50 4
gpt4 key购买 nike

我正在尝试在 PyTorch 中计算每 channel 梯度图像。为此,我想在图像的每个 channel 上使用 Sobel 滤波器执行标准 2D 卷积。我正在使用 torch.nn.functional.conv2d 为此功能

在我下面的最小工作示例代码中,我收到一个错误:

import torch
import torch.nn.functional as F

filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1)

RuntimeError: Given groups=1, weight[1, 1, 3, 3], so expected input[1, 3, 10, 10] to have 1 channels, but got 3 channels instead



这表明 groups需要是 3。但是,当我制作 groups=3 时,我得到一个不同的错误:
import torch
import torch.nn.functional as F

filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1, groups=3)

RuntimeError: invalid argument 4: out of range at /usr/local/src/pytorch/torch/lib/TH/generic/THTensor.c:440



当我检查 THTensor 类中的代码片段时,它指的是一堆维度检查,但我不知道我哪里出错了。

这个错误是什么意思?我如何用这个 conv2d 执行我想要的卷积功能?我相信我误解了 groups范围。

最佳答案

如果您想应用每 channel 卷积,那么您的 out-channel应该与您的 in-channel 相同.这是意料之中的,考虑到您的每个输入 channel 都会创建一个与其对应的单独输出 channel 。

简而言之,这将起作用

import torch
import torch.nn.functional as F

filters = torch.autograd.Variable(torch.randn(3,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1, groups=3)

而大小为 (2, 1, 3, 3) 的过滤器或 (1, 1, 3, 3)不管用。

此外,您还可以制作您的 out-channel in-channel的倍数.这适用于您希望每个输入 channel 有多个卷积滤波器的情况。

但是,这仅在它是倍数时才有意义。如果不是,则 pytorch 回退到其最接近的倍数,即小于您指定的数字。这再次是预期的行为。例如大小为 (4, 1, 3, 3) 的过滤器或 (5, 1, 3, 3) , 将导致 out-channel大小为 3。

关于convolution - 如何在 PyTorch conv2d 函数中使用组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46536971/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com