tensorflow / tflearn输入形状

时间:2016-04-09 15:51:56

标签: python tensorflow lstm

我试图创建一个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:无法为Tensor u' TargetsData / Y:0'提供形状值(128,16,4),其形状为'( ?,4)'

SO:到目前为止,我的假设是输入形状[None,seqLength,4]对TF [batchLength(由tflearn顺序输入),序列长度,样本的特征长度]说。我不明白为什么它说输出是错误的形状?我错误地假设数据序列分裂?当我只是尝试输入所有数据而不分成序列时,输入形状为[None,4],TF告诉我LSTM层需要一个至少有3维的输入形状。

我无法理解输入和输出的形状应该是什么。感觉这应该是一件简单的事情 - 我有一组矢量输入序列,我希望网络尝试预测序列中的下一个。网上的人数很少,并没有相当高级的知识水平,所以我打了一堵砖墙。真的很感激任何人都能给予的洞察力!

0 个答案:

没有答案