2017-08-15 93 views
1

下面是代碼https://github.com/tensorflow/tensorflow/blob/r0.10/tensorflow/models/rnn/ptb/ptb_word_lm.py,我不知道爲什麼我們可以通過餵養模式:我們可以在不定義tf.placeholder的情況下提供一個值嗎?

cost, state, _ = session.run([m.cost, m.final_state, eval_op], 
           {m.input_data: x, 
           m.targets: y, 
           m.initial_state: state}) 

因爲initial_state不與tf.placeholder,所以我們怎麼能養活嗎?

在代碼中,它定義了一個類。並定義了self._initial_state = cell.zero_state(batch_size, data_type()),然後state = self._initial_state(cell_output, state) = cell(inputs[:, time_step, :], state)。之後,self._final_state = state。更重要的是,它定義了一個函數的類:

@property def final_state(self): return self._final_state

這裏來

state = m.initial_state.eval() 
cost, state, _ = session.run([m.cost, m.final_state, eval_op], 
          {m.input_data: x, 
           m.targets: y, 
           m.initial_state: state}) 

而且我在本地運行的代碼,它頗有而不feeddict state的差異。

任何人都可以幫忙嗎?

回答

2

因爲initial_state不是tf.placeholder,所以我們怎麼餵它呢?

佔位符只是一個張量張量;我們可以養活使用feed_dict機制,

任何張量與我已在本地運行的代碼,它相當有feed_dict無狀態的差別。

這裏,如果您不從上一批中輸入學習狀態,則下一批的狀態將初始化爲零,因此結果將會降低。

+0

是的,你是對的。由於feed_dict機制,我被告知feed值可以替換圖中的同名張量。但是我仍然困惑,答案是否意味着我們在使用rnn和lstm時必須循環狀態?我已經閱讀了許多rnn和lstm的示例代碼,它們只是使用'initial_state = cell.zero_state(batch_size,data_type())'。如果還有其他的方式,我們可以循環狀態,除了一個類?非常感謝。 – grt1st

相關問題