在PyTorch中使用预定义的不可训练卷积核进行卷积

3
我想向我的神经网络引入一个自定义层。数学操作应该是使用非可训练内核的离散2D交叉相关(或卷积)。内核中的值取决于三个方面:内核形状、步幅和填充。我打算对输出进行逐元素乘以权重矩阵。
PyTorch已经实现了一个名为“Conv2d”的离散2D交叉相关类,但是它生成一个随机内核并使用该内核的条目进行训练。如果可能,我希望有一个类似于“Conv2d”的类来实现我需要的功能,以确保最有效地使用我的GPU。我尝试自己实现这个过程,但无法找到正确的输入数组形状。“Conv2d”只使用“in_channels”,如果我理解正确的话。
1个回答

2

如果我理解正确的话,您想要一个定义了内核但不可学习的Conv2d层。

在这种情况下,您可以像这样使用conv2d函数:

import torch.nn.functional as F
output_tensor = F.conv2d(input_tensor, your_kernel, ...)

参数your_kernel是您的权重矩阵,您还需要声明函数的其他参数,例如paddingstride

然后,您需要将requires_grad属性设置为'False',如果您不希望它可学习,则从优化器中排除它。

关于形状问题,也许您想要查看这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接