繁体   English   中英

tensorflow / tflearn输入形状

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM