Realización de convolución 1d usando kernel 2d en keras

Actualmente estoy trabajando en una red CNN, en la que quiero aplicar un kernel 2d en una imagen, pero solo tiene que realizar una convolución 1d, lo que significa que solo tiene que moverse a lo largo de un eje (eje x en este caso).

La forma del kernel es la misma que la del eje y de la imagen. El número de filtros aplicados no es una preocupación en este momento.

Un ejemplo: Dada una imagen de tamaño (6,3,3) = (filas, columnas, color_channel)

¿Cómo debo realizar una convolución 1d dado un filtro 2d?

Probado lo que fue sugerido por @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))) 

Error:

 The total size of the new array must be unchanged 

Suponiendo que la shape=(dim_x, dim_y, img_channels) su imagen shape=(dim_x, dim_y, img_channels) puede obtener una convolución 1D configurando:

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

Recuerde que la salida de esta capa tendría forma (dim_x, 1, output_channels) . Si desea que su entrada sea secuencial, puede usar la capa Reshape configurando:

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

Esto produciría una salida con forma (dim_x, output_channels) .

Un hecho interesante es que esta es exactamente la forma en que Conv1D funciona en Keras con el backend.