为什么Tensorflow不能自动处理重复单元的隐藏状态?

时间:2018-02-21 17:00:14

标签: python tensorflow

我将介绍几个使用LSTM单元格的Tensorflow示例,并尝试理解在一个实现中使用的initial_state变量的目的,但出于某种未知原因而不在另一个实现中。

例如PTB example将其用作:

self._initial_state = cell.zero_state(config.batch_size, data_type())
state = self._initial_state

它表示隐藏状态转换,用于在批处理训练期间保持隐藏状态不变。这个变量应该在时代之间自然归零。然而,一些经常性的Bi-LSTM models根本不使用initial_state,这使得你认为Tensorflow在某种程度上是在幕后完成的,或者根本不是必要的,因此会产生混淆。那么,为什么一些经常性模型使用它而其他人不使用它?例如,在Torch中,相同的机制就像:

一样简单
local params, grad_params = model:getParameters()
-- start training loop
while epoch < max_epoch do
   for mini_batch in training_data do
    (...)
    grad_params:zero()
   end
end

隐藏状态由框架处理,不需要所有那些真正笨重的东西,或者我在这里遗漏了什么。你能解释一下它在Tensorflow中是如何工作的吗?

1 个答案:

答案 0 :(得分:0)

据我了解,它似乎是Tensorflow PTB模型的特定设置,它不仅应该运行单个LSTM单元,而且运行多个(我甚至会尝试在超过2个单元格上训练它) 。为此,它需要跟踪单元格之间的ch张量,从而跟踪_initial_state变量。它也应该在几个GPU上并行运行,如果被中断等则继续运行。这就是为什么PTB示例代码看起来很难看并且过度设计到新手。