2016-12-13 36 views
2

我正在使用RNN控制器,它將當前的工廠狀態作爲RNN的輸入,並生成輸出作爲控制信號。在執行控制之後,更新後的工廠狀態作爲下一個時間步的輸入被反饋給RNN。在這個循環中,輸入序列是一步一步堆疊的,而不是預先給定的。 目前沒有涉及培訓。只需要單步前向模擬。 因此,可以做這個一步RNN輸出的張量流RNN操作就是我正在尋找的。張量流程中的單步模擬RNN

input_data = tf.placeholder(tf.float32, [batch_size, len_seq,8]) 

我定義了兩種輸入的:Input_data輸入的batch_size序列,以及用於input_single當前時間步的輸入端。 y_single對於每個時間步長,和y_seq爲輸入的整個minibatch:

input_single = tf.placeholder(tf.float32, [1, 1, 8]) 
action_gradient = tf.placeholder(tf.float32, [batch_size, len_seq, dimAction]) 
num_hidden = 24  
cell = tf.nn.rnn_cell.LSTMCell(num_hidden, state_is_tuple=True) 
state_single = cell.zero_state(batch_size, tf.float32) 
(output_single, state_single) = cell(input_single, state_single) 
weight = tf.Variable(tf.truncated_normal([num_hidden, dimAction])) 
bias = tf.Variable(tf.constant(0.1, shape=[dimAction])) 
y_single = tf.nn.tanh(tf.matmul(output_single, weight) + bias) 

網絡以兩種方式被讀出。

outputs, states = tf.nn.dynamic_rnn(cell, input_data, dtype=tf.float32) 
y_seq = tf.nn.tanh(tf.matmul(outputs, weight) + bias) 
+0

是的,我有問題的代碼。插入一些行。我試圖做一步輸入的輸入變量。當使用「input_single」時,它提出了一個TypeError:'Variable'對象不可迭代。 –

+0

你需要提供更多的代碼,input_single是如何定義的?另外,爲什麼不用'cell.zero_state(1,tf.float32)'作爲'state_single'? – martianwars

+0

@martianwars輸入單被定義爲一個形狀爲[[1,1,input_size]'的佔位符。我沒有使用'cell.zero_state(1,tf.float32)'進行'state_single'初始化的原因是,狀態不是一個序列,而只有一個時間步。 –

回答

4

您可以通過簡單地調用您的​​對象一次來實現此目的。確保你提出正確的論點。像這樣的東西會幫助你,

cell = tf.nn.rnn_cell.LSTMCell(num_hidden, state_is_tuple=True) 
input_single = tf.ones([batch_size, input_size]) 
state_single = cell.zero_state(batch_size, tf.float32) 
(output_single, state_single) = cell(input_single, state_single) 

看一看爲RNNCell.__call__()文檔以瞭解更多詳細信息的input_singlestate_single形狀應該是什麼,如果你有一個很好的理由不使用cell.zero_state()

+0

謝謝!我會嘗試上面的代碼。我將更多的代碼放在問題框中。希望它能更好地描述我的問題。接受 –

+1

。太糟糕了,我沒有名氣來upvote。 –

+0

謝謝!讓我知道如果你碰到更多的問題 – martianwars