0

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

我有以下内容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)

当 Kernel 为23时,网络运行良好,但4从那时起它会遇到关于维度的错误。我怀疑这与步幅有关。但是,该Keras网站 ( https://keras.io/layers/convolutional/ ) 并没有说明默认步幅长度是多少。

我现在的问题是:Keras 的 Conv1D 中的默认步幅长度是多少?4对于内核大小和内核大小来说,一个好的步幅长度是5多少?

4

2 回答 2

4

Conv1D 开始,默认步幅长度为 1。除非您对另一个长度有具体的理由,否则步幅长度为 1 通常是合适的。

你得到的错误可能是因为一维卷积层的输出维度是:

output_dim = 1 + (input_dim - kernel_size)/stride

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

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

于 2018-07-26T16:48:38.157 回答
0

默认步幅实际上是 (1,1),这意味着过滤器将在过滤器的每次水平移动时向右移动一个像素,对于过滤器的每次垂直移动,过滤器将向下移动一个像素。

于 2021-10-02T14:32:27.363 回答