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