Keras 的 Conv1D 中的默认步幅是多少?
What is the default stride length in Keras' Conv1D?
目前,我正在通过测试内核大小来调整我的模型。
我有以下 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)
当内核为2
或3
时,网络运行良好,但从4
开始出现维度错误。我怀疑这与步幅有关。但是,Keras
网站 (https://keras.io/layers/convolutional/) 并没有说明默认步幅是多少。
我现在的问题是:Keras 的 Conv1D 中的默认步幅是多少?对于 4
的内核大小和 5
的内核大小,什么是好的步长?
从 Conv1D 开始,默认步幅为 1。除非您有其他长度的具体理由,否则步幅 1 通常是合适的。
你得到的错误可能是因为一维卷积层的输出维度是:
output_dim = 1 + (input_dim - kernel_size)/stride
并且在堆叠多个一维卷积层之后,您可能会到达一个输入维数小于内核大小的层。发生这种情况是因为参数 padding
的默认值为 'valid'
,这意味着输入未被填充。
如果您想保留每个卷积层的输入维数,设置 padding='same'
会填充输入,使输出的长度与原始输入的长度相同。
默认步幅实际上是 (1,1),这意味着过滤器每水平移动一次,过滤器将向右移动一个像素,过滤器每垂直移动一次,过滤器将向下移动一个像素。
目前,我正在通过测试内核大小来调整我的模型。
我有以下 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)
当内核为2
或3
时,网络运行良好,但从4
开始出现维度错误。我怀疑这与步幅有关。但是,Keras
网站 (https://keras.io/layers/convolutional/) 并没有说明默认步幅是多少。
我现在的问题是:Keras 的 Conv1D 中的默认步幅是多少?对于 4
的内核大小和 5
的内核大小,什么是好的步长?
从 Conv1D 开始,默认步幅为 1。除非您有其他长度的具体理由,否则步幅 1 通常是合适的。
你得到的错误可能是因为一维卷积层的输出维度是:
output_dim = 1 + (input_dim - kernel_size)/stride
并且在堆叠多个一维卷积层之后,您可能会到达一个输入维数小于内核大小的层。发生这种情况是因为参数 padding
的默认值为 'valid'
,这意味着输入未被填充。
如果您想保留每个卷积层的输入维数,设置 padding='same'
会填充输入,使输出的长度与原始输入的长度相同。
默认步幅实际上是 (1,1),这意味着过滤器每水平移动一次,过滤器将向右移动一个像素,过滤器每垂直移动一次,过滤器将向下移动一个像素。