Keras中的conv1D内核大小

问题描述

我已经使用多个Conv1D层创建并训练了神经网络。我的输入大小为125x3。我为每个Conv1D层使用相同的内核大小。我尝试了几种内核大小2、5、25、50甚至125,并且我使用的是“相同”的填充。对于我来说,Keras的内核大小等于输入大小是令人意外的。甚至更令人意外的是,内核大小为126也可以使用。内核大小为126大于输入大小的体系结构示例:

inputs = keras.Input(shape=(125,3),dtype='float32')
out1 = Conv1D(20,126,padding='same',activation='relu')(inputs)
out1=Batchnormalization(name='Batchnormalization0')(out1)
out1 = Conv1D(112,name='Conv1',activation='relu')(out1)
out1=Batchnormalization(name='Batchnormalization1')(out1)

我不明白为什么会这样。有人可以解释一下当我使用等于输入大小甚至大于输入大小的内核大小时在Keras中会发生什么情况吗?

提前谢谢!

解决方法

内核大小如何大于时间步长?

让我们看看您的第二行

out1 = Conv1D(20,126,padding='same',activation='relu')(inputs)

这将创建一个输出20个过滤器并使用126内核的卷积,最重要的是将padding设置为 same !这种填充意味着在时间序列的开始和结束处放置足够的零,以便在卷积之后输出时间步长等于输入时间步长。

如果输入时间步长为10,内核为5,那么我们将不得不在数据的开头和结尾添加2个零。

对于您来说,在内核为126的情况下,卷积之前将在数据的开头添加62个零,在数据的末尾添加63个零。

  • 输入形状为125x3
  • 添加了
  • “相同”填充,使其变为250x3
  • 在250x3上应用20过滤器126内核,产生125x20的输出

基本上,您正在对一堆零进行卷积。