我正在尝试创建一个 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',其形状为 '(?, 4)'
SO:到目前为止,我的假设是输入形状 [None, seqLength, 4] 对 TF [batchLength(由 tflearn 顺序输入)、序列长度、样本的特征长度] 说。我不明白为什么它说输出是错误的形状?我是否错误地假设了数据序列拆分?当我只是尝试输入所有数据而不拆分为序列时,输入形状为 [None, 4],TF 告诉我 LSTM 层需要一个至少具有 3 维的输入形状。
我无法理解输入和输出的形状应该是什么。感觉这应该是一件简单的事情——我有一组向量输入序列,我希望网络尝试预测序列中的下一个。很少有在线课程不具备相当高级的知识水平,所以我碰了壁。非常感谢任何人可以提供的任何见解!