使用KERAS中的2D内核执行1D卷积



我当前正在使用CNN网络,我想在图像上应用2D内核,但是它只需要执行1D卷积,这意味着它只需要沿着移动一个轴(在这种情况下为x轴)。

内核的形状与图像的y轴相同。目前,应用的过滤器数量尚不关心。

一个例子:给定大小的图像(6,3,3)=(行,cols,color_channel)

给定2D滤波器我应该如何执行1D卷积?

尝试了@marcinMoëejko建议的内容

dim_x = 3
dim_y = 6
color_channels = 3
#model.add(ZeroPadding2D((6,4),input_shape=(6,3,3)))
model.add(Conv2D(filters = 32,kernel_size=(dim_y,1) , activation='linear' , input_shape = (6,3,3)))
print model.output_shape
model.add(Reshape((dim_x,color_channels)))

错误:

The total size of the new array must be unchanged

假设您的图像shape=(dim_x, dim_y, img_channels)可以通过设置获得1D卷积:

conv1d_on_image = Convolution2D(output_channels, 1, dim_y, border_mode='valid')(input)

请记住,该层的输出将具有形状(dim_x, 1, output_channels)。如果您希望输入是顺序的,则可以通过设置使用Reshape层:

conv1d_on_image = Reshape((dim_x, output_channels))(conv1d_on_image)

这将产生形状(dim_x, output_channels)

一个有趣的事实是,这正是Conv1DKeras中使用tf后端的方式。

最新更新