在自动编码器中使用扩张的卷积以获取时间数据



我正在尝试为时间序列数据构建和编码decoder模型,并在keras中使用1D卷积。考虑这个简单的模型:

inputs = Input(shape = (timesteps, input_dim))
t = Conv1D(16, kernel_size=3, padding='same')(inputs)
encoded = Conv1D(16, kernel_size=2, strides=2)(t)
t = UpSampling1D(2)(encoded)
t = Conv1D(16, kernel_size=3, padding='same')(inputs)
decoded = Conv1D(1, kernel_size=3, padding='same')(t)
model = Model(inputs, decoded)

我的问题是:

  1. 在哪里使用扩张(dilation_rate=2(?仅在编码器或两者中以最大化接受场?

  2. 我应该用什么用作潜在表示?完全连接的层,较低的尺寸图像(如上所述(,合并或更少的过滤器?

这个答案是针对通过Google来这里的其他人:

扩张与大步:大步使响应较小。因此,您只使用一次。扩张通过在中间添加零来使内核更大。它将带来与大步相同的效果,但不会使响应较小。keras/tf.keras示例:

x = input_img
x = Conv2D(16, (3, 3), padding='valid')(x)
x = Conv2D(16, (3, 3), strides=2, padding='valid')(x)
x = Conv2D(16, (3, 3), padding='valid')(x)
x = Conv2D(16, (3, 3), strides=2, padding='valid')(x)
x = Conv2D(16, (3, 3), padding='valid')(x)
encoded = Conv2D(num_featers, (2, 2), padding='valid')(x)

与:

相同
x = Conv2D(16, (3, 3), padding='valid')(x)
x = Conv2D(16, (3, 3), padding='valid')(x)
x = Conv2D(16, (3, 3), dilation_rate=2, padding='valid')(x)
x = Conv2D(16, (3, 3), dilation_rate=2, padding='valid')(x)
x = Conv2D(16, (3, 3), dilation_rate=4, padding='valid')(x)
encoded = Conv2D(num_featers, (2, 2), dilation_rate=4, padding='valid')(x)

如果您用diletation_rate替换自动编码器中的步幅,它将起作用。(conv2dtranspose也具有扩张_rate,但这无效:https://github.com/keras-team/keras/keras/issues/8159。围绕的工作是通过步幅(cododer(和upscaling2d(解码器(培训您的网络。加载这些权重。当您使用时,可以使用扩张的简单编码器。(

在这种情况下不需要汇总:可以帮助删除位置偏见。其他方法是翻译增加以获得相同的结果。取决于您的问题,您是否想要这个。

完全连接:完全过时。只需使用具有大小的卷积层即可连接所有内容。这是完全相同的,但可以具有更大的输入。

更少或更多的过滤器:我永远不知道。可视化过滤器和/或过滤器响应。如果您看到过滤器非常相似,则习惯了许多过滤器。或没有刺激足够的差异(辍学和数据启发可能会有所帮助(。

相关内容

  • 没有找到相关文章

最新更新