1D CNN是否需要填充以保留输入长度?

问题描述 投票:1回答:1

不应该使用stride = 1和1滤波器的1D CNN的输出长度等于输入长度而不需要填充?

我认为情况确实如此,但是创建了一个具有这些规格的Keras模型,当输入形状为(17910,1)时输出形状为(17902,1)。我想知道为什么尺寸减小了,因为步幅为1并且它是1D卷积。

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

我希望这个模型的输出形状应该是(17910,1),但显然我错过了这个转换中尺寸减小的来源。层。

python tensorflow keras neural-network conv-neural-network
1个回答
4
投票

输出向量的长度取决于输入的长度和内核大小。由于你的内核大小为9,你的输入会得到17902个卷积,因此输出形状(17902,1)(没有填充)。

为了更好地理解:

没有填充:

enter image description here

填充:

enter image description here

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

所以我的建议是尝试两种不同的CNN,除了填充之外,它们具有相同的架构,并采用具有更高精度的CNN。

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

© www.soinside.com 2019 - 2024. All rights reserved.