2017-08-15 92 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

相关问题