我目前正在开发一个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)))
答案 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)
的输出。
一个有趣的事实是,这与Conv1D
在Keras
后端tf
的工作方式完全相同。