您好,我正在尝试构建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,02s)。钢琴谱矩阵只有一个和零。
我已经准备好了我的训练数据,将我的钢琴乐曲重塑(一首又一首) 形状=(某物,批处理大小,49)。因此,我的输入数据是所有歌曲一首又一首地分开,大小成批大小。然后,我的训练数据是相同的输入,但延迟了一批。
x_seq_length和y_seq_length等于batch_size。 Input_dim = 49
我的输入和输出序列具有相同的维度。
我在推理中犯了任何错误吗?我找到的seq2seq模型正确吗?
答案 0 :(得分:0)
这不是seq2seq模型。 RepeatVector
采用最后一个编码器LSTM的最后状态,并为每个输出令牌制作一个副本。然后,将这些副本输入到“解码器” LSTM中,从而在每个时间步都有相同的输入。