创建一个具有1xD内核的CNN,其中D是在MxD矩阵上垂直滑动的列数?
我试图在Pytorch中创建一个CNN,它有一个内核,可以在2D图像上垂直滑动1xD内核,因此输出应该是Mx1。在CNN中,对图像的每一行进行卷积,然后为每一行生成一个值。还具有从1xD变为NxD的能力,其中N是一些预定义的行数也是不错的。输入仅仅是一个矩阵,而不是表示图像的3D矩阵。
nn.Conv2d
中的核不一定是正方形的,它们也可以是矩形的:
class MyModel(nn.Module):
def __init__(self, in_channels, out_channels, N, D):
super(MyModel, self).__init__()
self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=(N, D), padding=0, stride=1)
def forward(self, x):
return self.conv(x)
请注意,您的输入x
必须是4维的:B
-C
-H
-W
。其中通道的数量C
必须与构造MyModel
时定义的in_channels
相匹配
如果您有一个只有一个通道的单个图像,那么输入应该有两个主要的单个维度:即x
的形状应该是1
-1
-M
-D
有关为什么x
应该是4D的更多信息,请参阅此答案。