Keras的Conv1D中默认的步幅是多少?

时间:2018-07-26 15:24:03

标签: keras conv-neural-network stride

当前,我正在通过测试内核大小来调整模型。

我有以下code

x = embedding_layer(input_4)                
x = Conv1D(FILTERS, KERNEL, activation='relu')(x)
x = Dropout(DROPOUT)(x)            
x = Conv1D(FILTERS, KERNEL, activation='relu')(x)       
x = Dropout(DROPOUT)(x)
x = Conv1D(FILTERS, KERNEL, activation='relu')(x)       
x = Dropout(DROPOUT)(x)
x = Conv1D(FILTERS, KERNEL, activation='relu')(x) 
x = Dropout(DROPOUT)(x)            
x = Conv1D(FILTERS, KERNEL, activation='relu')(x) 
x = Dropout(DROPOUT)(x)            
x = MaxPooling1D(3)(x)

x = Conv1D(FILTERS, KERNEL, activation='relu')(x)
x = Dropout(DROPOUT)(x)            
x = Conv1D(FILTERS, KERNEL, activation='relu')(x)       
x = Dropout(DROPOUT)(x)
x = Conv1D(FILTERS, KERNEL, activation='relu')(x)       
x = Dropout(DROPOUT)(x)
x = Conv1D(FILTERS, KERNEL, activation='relu')(x) 
x = Dropout(DROPOUT)(x)            
x = Conv1D(FILTERS, KERNEL, activation='relu')(x) 
x = Dropout(DROPOUT)(x)            
x = MaxPooling1D(3)(x)

当内核为23时,网络运行良好,但是从4开始,它会遇到关于维数的错误。我怀疑这与步幅有关。但是,Keras网站(https://keras.io/layers/convolutional/)并未说明默认跨步长度。

我现在的问题是:Keras的Conv1D中的默认步幅是多少?对于4的内核大小和5的内核大小,步幅应该是多少?

1 个答案:

答案 0 :(得分:1)

Conv1D开始,默认步幅为1。除非您有其他长度的具体理由,否则步幅通常为1。

您得到的错误可能是因为一维卷积层的输出尺寸为:

output_dim = 1 + (input_dim - kernel_size)/stride

在堆叠几个1D卷积层之后,您可能会到达一个输入维数小于内核大小的层。发生这种情况是因为参数padding的默认值为'valid',这意味着输入没有被填充。

相反,如果您想保留每个卷积层的输入维数,则设置padding='same'会导致对输入进行填充,以使输出的长度与原始输入的长度相同。