我们可以在不定义tf.placeholder的情况下提供值吗?

时间:2017-08-15 12:30:27

标签: python python-3.x tensorflow

以下是代码https://github.com/tensorflow/tensorflow/blob/r0.10/tensorflow/models/rnn/ptb/ptb_word_lm.py,我想知道为什么我们可以通过以下方式提供模型:

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就会产生差异。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

  

因为initial_state不在tf.placeholder,所以我们如何才能提供它?

占位符只是一个张量流量张量;我们可以使用feed_dict机制

来提供任何张量
  

我已经在本地运行了代码,它在feed_dict中没有状态就完全没有区别了。

如果您没有从先前批次中提供学习状态,则下一批次的状态将初始化为零,因此结果会降低。