【问题标题】:Performing 1d convolution using 2d kernel in keras在 keras 中使用 2d 内核执行 1d 卷积
【发布时间】:2017-07-25 21:42:57
【问题描述】:

我目前正在研究一个 CNN 网络,我想在图像上应用 2d 内核,但它只需要执行 1d 卷积,这意味着它只需要沿着一个轴移动(这里的 x 轴)案子)。

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

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

在给定二维滤波器的情况下,我应该如何执行一维卷积?

尝试了@Marcin Moż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

【问题讨论】:

  • 一个样本进入转换层后会是什么形状?内核的形状是什么?你期望输出什么?从中我们可以帮助您,否则这太模糊了
  • 我试图添加更多关于 i 它将如何执行的信息.. 希望它能澄清一些事情..

标签: python machine-learning neural-network keras conv-neural-network


【解决方案1】:

假设你的图片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)的输出。

一个有趣的事实是,这正是 Conv1DKerastf 后端的工作方式。

【讨论】:

  • 我收到一条错误消息,指出新数组的总大小必须保持不变。我将更改我的问题以添加示例。
  • 很奇怪。您能否提供完整的代码和产生错误的行?你切换到Keras 2.0了吗?
  • 是的.. 我已经切换到 keras 2.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
相关资源
最近更新 更多