我正在嘗試將LSTM模型作爲model_fn輸入實現到Estimator。我的X只是一個帶時間序列價格的.txt文件。再進我的第一個隱藏層,我嘗試定義爲LSTM細胞:Tensorflow 1.0 LSTM cell in dynamic_rnn引發維度錯誤
def lstm_cell():
return tf.contrib.rnn.BasicLSTMCell(
size, forget_bias=0.0, state_is_tuple=True)
attn_cell = lstm_cell
if is_training and keep_prob < 1:
def attn_cell():
return tf.contrib.rnn.DropoutWrapper(
lstm_cell(), output_keep_prob=keep_prob)
cell = tf.contrib.rnn.MultiRNNCell([attn_cell() for _ in range(num_layers)], state_is_tuple=True)
initial_state = cell.zero_state(batch_size, data_type())
inputs = tf.unstack(X, num=num_steps, axis=0)
outputs = []
outputs, state = tf.nn.dynamic_rnn(cell, inputs,
initial_state=initial_state)
這則應該進入:
first_hidden_layer = tf.contrib.layers.relu(outputs, 1000)
不幸的是,它拋出一個錯誤idicating認爲「ValueError異常:尺寸必須爲1,但對於'轉置'(op:'移調'),其值爲3,輸入形狀爲[1],[3]。「 我收集我的問題是「輸入」張量。在描述中,輸入變量應該是形式爲[batch_size,max_time,...]的張量,但是我不知道如何將其轉換爲上述結構,因爲通過估計器只有輸入值X和目標值y被饋送到系統。所以我的問題是如何創建一個可以作爲dynamic_rnn類的輸入變量的張量。
非常感謝。
它的工作原理所需尺寸1的第三維,所以我很感激你,但我不太瞭解它呢。它說「輸入」變量必須是「[batch_size,time_steps,....]」形式。然而,當我將它交給估計器時,我的X僅僅是一個numpy數組,當然這個估計器在兩個維度上都會產生一個張量。所以我的問題是第二個問題是什麼,它來自哪裏,在什麼意義上這個和「tf.expand_dims()」命令創建了「[batch_size,time_steps,....]」的形式? –
我認爲根據你的問題,你有一個價格序列(可以說它的長度爲T)。 dynamic_rnn可以一次處理多個序列「批量」(可以說它的大小是B)。如果你只想提供一個序列,那麼設置B爲1.所以輸入的形狀應該是[B,T],但dynamic_rnn需要多一個維度(在其他任務中很有用,比如每個單詞都是矢量的NLP)。因爲我們必須有這個額外的維度,但不需要它的一系列價格,我們將它設置爲1.因此輸入形狀是[B,T,1]。如果time_major爲True,它應該是[T,B,1]。 expand_dims增加了額外的維度。 –
我明白最後一部分,但我的問題是要理解如何設置B.像我說的,我只在一維numpy數組中提供時間序列給估計器。我唯一一次告訴系統batch_size是在定義initial_state變量時。這也導致了我的損失函數,看起來像這樣: –