【发布时间】: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 有什么作用?
【问题讨论】: