0

我正在學習如何使用LSTM RNN。 我看到了本教程:https://www.youtube.com/watch?v=SeffmcG42SY& 之後,我嘗試應用所學知識並更改數據集。 問題是,我有點失去了所有的重塑,我真的不知道如何使用它們,爲什麼他們在這裏... 我的數據集有7列和546行。 這裏是我的超參數LSTM張量形狀和超參數Tensorflow

# hyperparameters 
lr = 0.001 
training_iters = 100000 
batch_size = 64 

n_inputs = 7 # columns 
n_steps = 546 # rows 
n_hidden_units = 128 # neurons in hidden layer 
n_classes = 1 # class 

當我啓動我的會議,它看起來像這樣:

with tf.Session() as sess: 
    init = tf.global_variables_initializer() 
    sess.run(init) 
    step = 0 
    while step * batch_size < training_iters: 
     batch_xs, batch_ys = inputX, inputY 
     batch_xs = batch_xs.reshape([batch_size, n_steps, n_inputs]) 
     sess.run([train_op], feed_dict={ 
      x: batch_xs, 
      y: batch_ys, 
     }) 
     if step % 20 == 0: 
      print(sess.run(accuracy, feed_dict={ 
      x: batch_xs, 
      y: batch_ys, 
      })) 
     step += 1 

然後,我有一個錯誤消息

「不能重塑尺寸3822型數組形狀(64,546,7)「

如果有人能解釋我該如何工作和/或如何解決問題,那將非常棒!

謝謝

+0

爲什麼不打印張量形狀以查看它們的尺寸? –

+0

輸入應該是'[batch_size,time_steps,sample_dim]'。在你的數據集中,我假設每一行都有一個長度爲7的序列數據。因此,選擇N行將是你的'batch_size','time_steps'是7,如果它的'one-hot'編碼向量是'sample_dim', –

+0

那麼,我的批量大小是x:(546,7)和y:(546,1)。我的功能不是很熱,所以如果我明白了,我不會有一個樣本暗淡的參數? –

回答

2

LSTM單元具有輸入與所述LSTM細胞被展開隨時間的一個序列的不同的輸入。而且由於我們使用批量學習算法,我們需要提供一批輸入。因此,tesorflow中的LSTM輸入具有形狀(batch_size X時間步驟來展開X輸入大小)。

在你的情況

  1. 的batch_size = 64
  2. 倍步驟展開= 546
  3. 輸入大小= 7

基地,你的輸入是如何(你是怎麼做到的特徵提取) ,您將不得不將其重塑爲64 X 546 X 7(== 244608),如果您的輸入尺寸是3822,那麼這將導致失敗

考慮從序列到序列預測的LSTM(一對一模型)。例如,假設你有一個句子列表(讓我們說S句子)。假設你在每個句子中都有W字。現在您要預測每個句子中每個單詞的詞性標籤。假設您將每個單詞表示爲一個熱門編碼,並且詞彙大小爲V.因此,熱點編碼矢量的大小將爲V.

現在,您的LSTM模型輸入形狀將爲(批量大小XWXV),其中批量大小是< < S,通常是32或64.

+0

感謝您的迴應,我現在更瞭解這一點! –

相關問題