Keras 在时间数据的自动编码器中,在哪里使用扩展卷积?

Keras 在时间数据的自动编码器中,在哪里使用扩展卷积?,keras,conv-neural-network,autoencoder,Keras,Conv Neural Network,Autoencoder,我正在尝试为Keras中的一维卷积时间序列数据建立编译码模型。考虑这个简单的模型: inputs=Input(形状=(时间步,输入尺寸)) t=Conv1D(16,内核大小=3,padding='same')(输入) 编码=Conv1D(16,内核大小=2,步幅=2)(t) t=上采样1d(2)(编码) t=Conv1D(16,内核大小=3,padding='same')(输入) decoded=Conv1D(1,内核大小=3,padding='same')(t) 模型=模型(输入,解码) 我

我正在尝试为Keras中的一维卷积时间序列数据建立编译码模型。考虑这个简单的模型:

inputs=Input(形状=(时间步,输入尺寸))
t=Conv1D(16,内核大小=3,padding='same')(输入)
编码=Conv1D(16,内核大小=2,步幅=2)(t)
t=上采样1d(2)(编码)
t=Conv1D(16,内核大小=3,padding='same')(输入)
decoded=Conv1D(1,内核大小=3,padding='same')(t)
模型=模型(输入,解码)
我的问题是:

  • 在哪里使用膨胀(
    膨胀率=2
    )?为了最大化感受野,是仅在编码器中还是在两者中

  • 我应该用什么作为潜在表征?全连接层,低维图像(如上所述),池或更少的过滤器


  • 这个答案适用于通过谷歌来到这里的其他人:

    扩张与步幅:步幅使响应变小。所以你只使用一次。膨胀通过在两者之间添加零使内核变大。它将产生与跨步相同的效果,但不会使响应变小。 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)
    
    如果你用像这样的扩张率来代替自动编码器中的步幅,它就会起作用。(Conv2dTranspose也有扩容率,但这不起作用:。一个解决办法是用步幅(编码器)和放大2D(解码器)来训练你的网络。使用扩容后,将这些权重加载到一个更简单的编码器中。)

    关于池:在这种情况下不需要池,但它可以帮助消除位置偏差。另一种方法是增加翻译以获得相同的结果。取决于你的问题,你是否想要这个

    完全连接:完全过时。只需使用一个大小相同的卷积层来连接所有内容。这是完全相同的,但将有可能有一个更大的投入


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

    为什么要使用
    扩容
    ?以最大化感受野,并能够将系列中的所有信息压缩到一个小的数据结构中