一维CNN是否需要填充以保留输入长度?

Joh*_*ohn 1 python neural-network conv-neural-network keras tensorflow

步幅= 1和1滤波器的一维CNN是否不需要填充就可以使输出长度等于输入长度?

我以为是这种情况,但是创建了具有这些规范的Keras模型,说输入形状为(17910,1)时输出形状为(17902,1)。我想知道为什么尺寸减小了,因为步幅是1,是一维卷积。

model = keras.Sequential([
layers.Conv1D(filters=1,kernel_size=9,strides=1,activation=tf.nn.relu,input_shape=X_train[0].shape)
        ])
Run Code Online (Sandbox Code Playgroud)

我希望该模型的输出形状应为(17910,1),但很显然,我在此转换中缺少缩小尺寸的来源。层。

ga9*_*dil 5

输出向量的长度取决于输入的长度和内核大小。由于您的内核大小为9,因此您的输入将得到17902卷积,从而得到形状为(17902,1)(无填充)的输出。

为了更好的理解:

没有填充:

在此处输入图片说明

带填充:

在此处输入图片说明

是否应该使用填充更是准确性的问题。正如Ian Goodfellow,Yoshua Bengio和Aaaron Courville在其深度学习书中所发现的那样,最佳填充(至少对于2D图像)介于“无”和“相同”之间

因此,我的建议是,尝试使用两种具有相同架构(除了填充)的CNN,并选择精度更高的CNN。

(来源:https : //www.slideshare.net/xavigiro/recurrent-neural-networks-2-d2l3-deep-learning-for-speech-and-language-upc-2017