[英]tensorflow/tflearn input shape
我正在尝试创建一个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:无法为张量u'TargetsData / Y:0'输入形状为((?,4)'的形状(128,16,4)的值
因此:到目前为止,我的假设是输入形状[None,seqLength,4]对TF [batchLength(由tflearn顺序馈入),序列长度,样本特征长度]说。 我不明白的是为什么它说输出的形状错误? 我是否对数据序列分割有错误的假设? 当我只尝试输入所有数据而不拆分为序列时,因此输入形状为[None,4],TF告诉我LSTM层期望输入形状至少具有3个维度。
我无法理解输入和输出的形状应该是什么。 感觉这应该很简单-我有一组向量输入序列,我希望网络尝试预测序列中的下一个序列。 很少有网络不具备相当高级的知识,因此我遇到了麻烦。 非常感谢任何人都能提供的见解!
我解决了这个问题,所以在这里为有相同问题的任何人写答案。 这是基于对这些网络如何工作的误解,但这是我阅读过的大多数教程中假定的知识,因此其他初学者可能不清楚。
LSTM网络在这些情况下非常有用,因为它们可以考虑输入历史记录。 向LSTM提供历史记录的方法是通过测序,但是每个序列仍会导致一个输出数据点。 因此,输入必须为3D形状,而输出仅为2D。
给定整个序列和所需的historyLength,我将输入分为historyLength序列和单个输出向量。 这解决了我的形状问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.