【问题标题】:Is this a valid seq2seq lstm model?这是一个有效的 seq2seq lstm 模型吗?
【发布时间】:2020-06-08 14:13:20
【问题描述】:

您好,我正在尝试构建一个 seq2seq 模型来生成一些音乐。 不过我真的不太了解。 在互联网上我找到了这个模型:

def createSeq2Seq():
    #seq2seq model

    #encoder
    model = Sequential()
    model.add(LSTM(input_shape = (None, input_dim), units = num_units, activation= 'tanh', return_sequences = True ))
    model.add(BatchNormalization())
    model.add(Dropout(0.3))
    model.add(LSTM(num_units, activation= 'tanh'))

    #decoder
    model.add(RepeatVector(y_seq_length))
    num_layers= 2
    for _ in range(num_layers):
        model.add(LSTM(num_units, activation= 'tanh', return_sequences = True))
        model.add(BatchNormalization())
        model.add(Dropout(0.3))

    model.add(TimeDistributed(Dense(output_dim, activation= 'softmax')))
    return model

我的数据是钢琴卷的列表。钢琴卷是一个矩阵,其列代表不同可能音高(在我的情况下为 49)的单热编码,每列代表一个时间(在我的情况下为 0.02 秒)。钢琴卷矩阵只有 1 和 0。

我已经准备好我的训练数据,将我的钢琴曲(一首一首)重新塑造成 形状=(东西,批量大小,49)。所以我的输入数据是所有歌曲一个接一个地以批量大小的块分隔。然后我的训练数据是相同的输入,但延迟了一批。

x_seq_length 和 y_seq_length 等于 batch_size。 Input_dim = 49

我的输入和输出序列具有相同的维度。

我的推理有什么错误吗?我发现的 seq2seq 模型是否正确? RepeatVector 有什么作用?

【问题讨论】:

    标签: python keras lstm seq2seq


    【解决方案1】:

    这不是 seq2seq 模型。 RepeatVector 获取最后一个编码器 LSTM 的最后一个状态,并为每个输出令牌制作一份副本。然后将这些副本输入到“解码器”LSTM 中,因此在每个时间步都有相同的输入。

    适当的自回归解码器将其先前的输出作为输入,即在训练时,解码器的输入与其输出相同,但移位了一个位置。这也意味着您的模型缺少解码器输入的嵌入层。

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 2016-11-24
      • 2010-11-25
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多