我正在尝试创建一个 lstm-rnn 来生成音乐序列。训练数据是大小为 4 的向量序列,表示一些要训练的歌曲中每个音符的各种特征(包括 MIDI 音符)。
从我的阅读来看,我想要做的是对于每个输入样本,输出样本是下一个大小为 4 的向量(即,它应该尝试在给定当前音符的情况下预测下一个音符,并且由于LSTM 融合了之前样本的知识)。
我正在使用 tflearn,因为我对 RNN 还很陌生。我有以下代码
net = tflearn.input_data(shape=[None, seqLength, 4])
net = tflearn.lstm(net, 128, return_seq=True)
net = tflearn.dropout(net, 0.5)
net = tflearn.lstm(net, 128)
net = tflearn.dropout(net, 0.5)
net = tflearn.fully_connected(net, 4, activation='softmax')
net = tflearn.regression(net, optimizer='adam',
loss='mean_square')
# Training
model = tflearn.DNN(net, tensorboard_verbose=3)
model.fit(trainX, trainY, show_metric=True, batch_size=128)
在这段代码之前,我已将 trainX 和 trainY 拆分为长度为 20 的序列(任意,但我在某处读到,对这样的序列进行训练是实现此目的的好方法)。
这似乎很好,但我收到错误 ValueError: Cannot feed value of shape (128, 16, 4) for Tensor u'TargetsData/Y:0', which has shape '(?, 4)'
SO:到目前为止,我的假设是输入形状 [None, seqLength, 4] 对 TF [batchLength(由 tflearn 顺序输入)、序列长度、样本特征长度] 表示。我不明白的是为什么它说输出形状错误?我对数据序列分割的假设是否错误?当我尝试输入所有数据而不拆分为序列时,输入形状为 [None, 4],TF 告诉我 LSTM 层需要至少具有 3 个维度的输入形状。
我无法弄清楚输入和输出的形状应该是什么。感觉这应该是一件简单的事情——我有一组向量输入序列,我希望网络尝试预测序列中的下一个。网上很少有不具备相当高级知识水平的内容,所以我遇到了困难。非常感谢任何人都能提供的任何见解!