我们可以在不定义tf.placeholder的情况下提供一个值吗?
问题描述:
下面是代码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
的差异。
任何人都可以帮忙吗?
答
因为initial_state不是
tf.placeholder
,所以我们怎么喂它呢?
占位符只是一个张量张量;我们可以养活使用feed_dict
机制,
任何张量与我已在本地运行的代码,它相当有feed_dict无状态的差别。
这里,如果您不从上一批中输入学习状态,则下一批的状态将初始化为零,因此结果将会降低。
是的,你是对的。由于feed_dict机制,我被告知feed值可以替换图中的同名张量。但是我仍然困惑,答案是否意味着我们在使用rnn和lstm时必须循环状态?我已经阅读了许多rnn和lstm的示例代码,它们只是使用'initial_state = cell.zero_state(batch_size,data_type())'。如果还有其他的方式,我们可以循环状态,除了一个类?非常感谢。 – grt1st