以下是代码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
就会产生差异。
有人可以帮忙吗?
答案 0 :(得分:2)
因为initial_state不在
tf.placeholder
,所以我们如何才能提供它?
占位符只是一个张量流量张量;我们可以使用feed_dict
机制
我已经在本地运行了代码,它在feed_dict中没有状态就完全没有区别了。
如果您没有从先前批次中提供学习状态,则下一批次的状态将初始化为零,因此结果会降低。