首页 > 解决方案 > 如何在 conv2d (PyTorch) 中动态更改内核的大小?

问题描述

如何在 PyTorch 中设置动态内核大小?

我正在将图像传递给我的网络,并且我想将我的内核设置为根据输入的偏心率来改变大小步幅。另外,我想使用圆形而不是平方内核。

这听起来可能吗?我试图谷歌但没有运气。任何帮助将不胜感激!

编辑:更清楚一点:输入图像的大小都相同,一旦网络初始化,我不需要更改内核大小。我只需要一个行为或多或少像这样的转换层(底部图像)。基本上,内核会根据离心率改变大小,以便在中心具有高分辨率,而在外围具有越来越低的分辨率(通过汇集更大和重叠的区域)。

标签: pythonpytorchcomputer-visionconv-neural-network

解决方案


是的,您可以在转发功能中轻松做到这一点..

例如,在这段代码中,我调用了一个布尔函数,如果结果为 True,我正在使用 conv1,否则我正在使用 conv2。

    def forward(self, x):
        """
        In the forward function we accept a Tensor of input data and we must return
        a Tensor of output data. We can use Modules defined in the constructor as
        well as arbitrary operators on Tensors.
        """
        if boolean_func(x):
            x = self.conv1(x)
        else:
            x = self.conv2(x)
        out = self.dense1(x)
        return out

在您的情况下,您可以定义两个卷积层,并根据输入条件使用您想要的一个。

在反向传播过程中,由于存储在图中的计算信息,您使用的层的权重将在没有任何干预的情况下更新。


推荐阅读