【问题标题】:Can we feed a value without defining tf.placeholder?我们可以在不定义 tf.placeholder 的情况下提供一个值吗?
【发布时间】:2017-08-15 12:30:26
【问题描述】:

这是代码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 是完全不同的。

谁能帮忙?

【问题讨论】:

    标签: python python-3.x tensorflow


    【解决方案1】:

    因为initial_state 没有tf.placeholder,那我们怎么喂它呢?

    Placeholder 只是一个 tensorflow 张量;我们可以使用feed_dict 机制提供任何张量,

    而且我在本地跑过代码,在feed_dict中没有状态的情况下还是有很大区别的。

    这里如果你不提供前一批的学习状态,下一批的状态将被初始化为零,因此结果会下降。

    【讨论】:

    • 是的,你是对的。并且有人告诉我,由于 feed_dict 机制,feed 值可以替换图中同名的张量。但是我还是很困惑,答案是否意味着我们在使用 rnn 和 lstm 时必须循环状态?我已经阅读了许多 rnn 和 lstm 的示例代码,它们只是使用initial_state = cell.zero_state(batch_size, data_type())。如果除了类之外还有其他方法可以循环状态吗?非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多