簡體   English   中英

這是一個有效的 seq2seq lstm model 嗎?

[英]Is this a valid seq2seq lstm model?

您好我正在嘗試構建一個 seq2seq model 來生成一些音樂。 不過我真的不太了解。 在互聯網上,我發現了這個 model:

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。

我已經准備好我的訓練數據,將我的鋼琴曲(一首一首)重新塑造成 shape = (something, batchsize, 49)。 所以我的輸入數據是所有歌曲一個接一個地以批量大小的塊分隔。 我的訓練數據是相同的輸入,但延遲了一批。

x_seq_length 和 y_seq_length 等於 batch_size。 Input_dim = 49

我的輸入和 output 序列具有相同的維度。

我的推理有什么錯誤嗎? 我發現的 seq2seq model 是否正確? RepeatVector 有什么作用?

這不是 seq2seq model。 RepeatVector獲取最后一個編碼器 LSTM 的最后一個 state 並為每個 output 令牌制作一份副本。 然后將這些副本輸入到“解碼器”LSTM 中,因此在每個時間步都有相同的輸入。

合適的自回歸解碼器將其先前的輸出作為輸入,即在訓練時,解碼器的輸入與其 output 相同,但偏移了一個 position。 這也意味着您的 model 錯過了解碼器輸入的嵌入層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM