【问题标题】:Stride usage in Conv1DConv1D 中的步幅使用
【发布时间】:2019-02-17 11:12:05
【问题描述】:

这是我第一次尝试在时间序列数据中使用 Conv1D。我知道默认情况下 conv1d 的步幅为 1。但是如果我有一个大小为 1500x9 的数据,并且我使用了 32 个大小为 250 且步幅为 9 的过滤器。

我尝试搜索了很多来源,但没有得到很好的解释。如果我使用 9 作为步幅值,我的“model.summary()”看起来像

model=Sequential()
model.add(Conv1D(32,250,padding='same',input_shape=(1500,9), 
kernel_regularizer=regularizers.l2(0.01)))
c1 = MaxPooling1D(2)
model.add(c1)
model.add(Dropout(0.5))
model.add(BatchNormalization())

如果我使用 stride = 1,那么 model.summary() 看起来像这样

它是如何工作的?如果有人能解释这一点,我会很高兴。

【问题讨论】:

    标签: python tensorflow keras conv-neural-network


    【解决方案1】:

    这是因为梯度,例如,如果您计算:

    input shape:[batch,1500,9]
    filtershape:[32,9,250]
    stride:1
    

    如果 padding="same" 它对 1500 中的每 32 个过滤器应用过滤器,在这种情况下以 1 对 1 扫描优化器关联过滤器与 1500(int(1500/1)) 过程的梯度 但是,如果您将步幅设置为 9,那么当您使用 166(int(1500/9)) 进程的梯度执行此优化器关联过滤器时,它将过滤器应用于 1500 中的每 32 个,并以 9 乘 9 扫频

    166 过程的梯度比 1500 更容易处理。这样做会破坏输出之间的相关性。它变得更容易优化,但这并不意味着准确度值会更高。

    如果您想更好地理解,我建议您阅读此文档: https://www.tensorflow.org/api_guides/python/nn#Convolution

    【讨论】:

    • 我已经阅读了这份文件。就像我发布的问题一样,当我选择 stride=1 和 stride=9 时,我无法理解模型性能的差异。我知道当我们选择更高的步幅值时,它会跳过值。但是为什么模型的性能会有这样的差异。 stride=1 的模型表现不佳,但 stride=9 的模型表现得非常好。
    • @Gafa 你没有问性能变化的背景,只问了 stride 是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2023-03-12
    相关资源
    最近更新 更多