神经网络中的超长序列

数据挖掘 深度学习 lstm 顺序 序列到序列
2022-02-24 07:15:47

关于神经网络中序列的初学者问题:假设我有如下分类问题:
X = 非常长的可变长度序列。Y = 类(为简单起见假设 y=0/1)。
类取决于整个序列 - 如果不查看所有类,就不可能确定类。
NN如何处理这个?我已经阅读了各种方法,例如截断序列(这是一个问题 - 序列的截断部分没有类,所以我无法标记它),使用编码器/解码器 lstm(再次,无法完全理解它是如何解决问题)等。

1个回答

您确实可以使用像 LSTM 这样的循环网络的能力来处理变长问题。但不幸的是,如果你使用 keras 或 Tensorflow,所有的 Tensor 在一个批次中必须具有相同的长度。你可以做什么 :

  • 用未使用的值(通常为 0)填充所有序列,以使所有序列具有相同的长度。在输入层之后使用掩码层:训练模型时不会考虑 0。下面是一个使用 Keras 框架的示例(不完整,未测试):

    from keras.models import Model
    from keras.layers import Input, LSTM, Dense
    input = Input(shape=[None, nb_of_features_per_timestep])
    layer = Masking(mask_value=0)(input)
    layer = LSTM(50, return_sequences=False)(layer)
    output = Dense(nb_classe)(layer)
    model = Model(input,output)
    
  • 您还可以使用分桶技巧:将数据集分组为相同大小(大约)的“桶”。然后,您可以创建相同大小的批次。您不再需要遮罩层。

  • 您还可以使用完全卷积网络。这些网络也可以采用不同大小的输入。如果你想使用它,我让你搜索。

关于编码器/解码器:这些模型可能会对您有所帮助,但我认为您将不得不使用我提到的技巧之一。如果您不了解 RNN 的工作原理,我建议您先深入研究一下该主题。