在keras中使用2d内核执行1d卷积

时间:2017-03-06 06:00:32

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

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

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

一个例子: 给定大小为(6,3,3)=(行,列,颜色_通道)的图像

在给定2d滤波器的情况下,我应该如何执行1d卷积?

尝试了@MarcinMożejko的建议

if (userDetailRealmModel.getuID() != i) {
      userDetailRealmModel.setUser_id(userDetailModelArrayList.get(i).getUser_id());
      userDetailRealmModel.setFirstname(userDetailModelArrayList.get(i).getFirstname());
      userDetailRealmModel.setLastname(userDetailModelArrayList.get(i).getLastname());
      userDetailRealmModel.setEmail(userDetailModelArrayList.get(i).getEmail());
      userDetailRealmModel.setPhone_no(userDetailModelArrayList.get(i).getPhone_no());
      userDetailRealmModel.setLatitude(userDetailModelArrayList.get(i).getLatitude());
      userDetailRealmModel.setLongitude(userDetailModelArrayList.get(i).getLongitude());
      userDetailRealmModel.setIs_private(userDetailModelArrayList.get(i).getIs_private());
      userDetailRealmModel.setCreation_datetime(userDetailModelArrayList.get(i).getCreation_datetime());
      userDetailRealmModel.setUpdate_datetime(userDetailModelArrayList.get(i).getUpdate_datetime());

      realm.beginTransaction();
           realm.copyToRealmOrUpdate(userDetailRealmModel); //pass your object
           realm.commitTransaction(); 
    }

错误:

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)))

1 个答案:

答案 0 :(得分:2)

假设您的图片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的工作方式完全相同。