卷积时Convolution1D和Convolution2D的不同

Convolution1D的示例代码

# apply a convolution 1d of length 3 to a sequence with 10 timesteps,
# with 64 output filters
model = Sequential()
model.add(Convolution1D(64, 3, border_mode='same', input_shape=(10, 32)))
# now model.output_shape == (None, 10, 64)

# add a new conv1d on top
model.add(Convolution1D(32, 3, border_mode='same'))
# now model.output_shape == (None, 10, 32)

参数意思是 取64个长度为3的卷积核,保留边界处的卷积结果(即输出shape和输入shape一样),对10*32的输入数据进行卷积。

Convolution2D的示例代码

# apply a 3x3 convolution with 64 output filters on a 256x256 image:
model = Sequential()
model.add(Convolution2D(64, 3, 3, border_mode='same', input_shape=(3, 256, 256)))
# now model.output_shape == (None, 64, 256, 256)

# add a 3x3 convolution on top, with 32 output filters:
model.add(Convolution2D(32, 3, 3, border_mode='same'))
# now model.output_shape == (None, 32, 256, 256)

参数意思是 取64个3 * 3的卷积核,保留边界处的卷积结果(即输出shape和输入shape一样),对3 * 256 * 256的输入数据进行卷积。

刚开始接触到的卷积核都是3 * 3,5 * 5这种的,突然看到个长度为3的卷积核,误以为是3 * 3的,查阅资料得知,卷积核的形状不一定是正方形,也有长方形,会随着场景改变。

因为卷积最常用来处理图片,图片数据的输入一般都是N*N的方阵,为了方便,卷积核用的基本都是 奇数 * 奇数 的方阵,就像3 * 3或5 * 5的卷积核等。所以此时用的函数是Convolution2D。

Convolution1D多用于文本处理等,文本数据的输入很少为方阵,大多是像1000 * 50或700 * 40(数字只是举例,无实际意义)的,就称它为形似长方形的矩阵,所以对于Convolution1D中卷积核的参数,虽然给的是3,但其卷积核并不是3 * 3的方阵,只能说明这个卷积核的长度是3,至于宽度就要看输入的文本数据的宽度了,比如文本输入数据是1000 * 50,卷积核长度为3,则其实这里的卷积核是一个3 * 50的矩阵。

更通俗一点理解就是,Convolution1D的卷积核只在一个方向上移动,并实施卷积操作。Convolution2D的卷积核则是在两个方向上移动并进行卷积操作。

你可能感兴趣的:(卷积时Convolution1D和Convolution2D的不同)