簡體   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