音楽のシーケンスを生成する lstm-rnn を作成しようとしています。トレーニング データは、サイズ 4 のベクトルのシーケンスであり、トレーニングするいくつかの曲の各ノートのさまざまな機能 (MIDI ノートを含む) を表します。
私の読書から、私がやろうとしているのは、各入力サンプルに対して持っているように見えます.出力サンプルは次のサイズ4のベクトルです(つまり、現在のものから次の音符を予測しようとする必要があります.以前のサンプルの知識を組み込んだ LSTM)。
私はまだRNNに慣れていないので、tflearnを使用しています。次のコードがあります
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 次元の入力形状を期待していることを通知します。
入力と出力の形状がどうあるべきか、頭を丸くすることはできません。これは単純なことのように感じます.ベクトルの入力シーケンスのセットがあり、ネットワークにシーケンスの次のシーケンスを予測させたいと思っています. かなり高度なレベルの知識を想定していないオンラインはほとんどないので、私はレンガの壁にぶつかりました. 誰かが与えることができる洞察に本当に感謝します!