首页 > 解决方案 > 如何控制一维卷积模型的重叠?

问题描述

我正在尝试使用 TensorFlow 创建一个窗口大小为 200 的一维卷积模型,以便每个窗口重叠 50%。

我希望这是一个简单的修复,因为我认为它只是步幅参数,但我不确定。

这是我当前的代码,我在其中循环了几个卷积层(conv_sizes)。每个卷积层的组也等于 1。

(忽略“自我”,因为我将 conv_sizes 分配给模型类)

window = 200
pad = int(window/2)

conv_sizes = [40, 30, 20]
groups = [1, 1, 1]

... 

cur_layer = nn.Conv1d(self.conv_sizes[i], self.conv_sizes[i+1], kernel_size=window,
                                  groups=groups[i], stride=1, padding=pad)

它目前通过逐个窗口运行,我认为 stride = 1 需要更改。

但我想确保我的方向是正确的。我可以将 stride = 1 切换到 0.5 吗?还是groups参数?

帮助和解释会很棒。

标签: pythonvisual-studiotensorflowconv-neural-networkoverlap

解决方案


如果这是不正确的,我深表歉意;我对此也很陌生。

卷积层中的步幅告诉该层将过滤器移动多少。

步幅 1:

在此处输入图像描述

步幅 2:

在此处输入图像描述

因此,实际上不可能将 stride 设置为 0.5,因为这会导致“中间”,即在没有插值的情况下数据不存在。

当前步幅为 1,窗口为 200,您的卷积正在执行类似的操作,其中“重叠”为 199/200 点,即 99.5%。:

在此处输入图像描述

如果你想要 50% 的数据重叠,那么你想要 kernel_size * 0.5 = 100 的步幅大小。

在此处输入图像描述


推荐阅读