cudnnLSTM不会还原为cudnnCompatibleLSTM

时间:2018-08-27 21:00:47

标签: tensorflow

我正在尝试使用TF 1.9 / 1.10在GPU机器(AWS p3x2,Volta)上训练基本网络。不是Keras-仅限于TF。

基于[相当有限的文档],我的目标是训练cudnnLSTM单元,保存检查点,然后在CPU上恢复推理。按照这个目标,我认为cudnnCompatibleLSTM是可行之路,因为它应该从GPU特定的LSTM实现中吸取权重。

无论我如何尝试,都会出现以下错误:

NotFoundError (see above for traceback): Key caseTesting/testbed/rnn/multi_rnn_cell/cell_0/cudnn_compatible_lstm_cell/bias not found in checkpoint   [[Node: caseTesting/testbed/save/RestoreV2 = RestoreV2[dtypes=[DT_FLOAT, DT_FLOAT],
_device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_ caseTesting/testbed/save/Const_0_0, caseTesting/testbed/save/RestoreV2/tensor_names, caseTesting/testbed/save/RestoreV2/shape_and_slices)]]

另一个相关的问题是cudnnCompatibleLSTM和cudnnLSTM在数学上并不相同。对于初始化的单元格,我得到不同的结果。 [由某些tf.constant()初始化为初始化程序,没有保存/恢复]。似乎cudnnLSTM确实依赖于随机种子[dropout为零],这意味着正在进行一些唯一的张量/张量初始化,将其与cudnnCompatibleLSTM分开。

有人知道吗?

1 个答案:

答案 0 :(得分:0)

一些答案​​:

假设您已经阅读了有关cudnnLSTM + cudnnCompatibleLSTM的文档[可悲的是,大部分都是代码中的文档]

  1. 构建两个图形替代方案,每个替代方案
  2. 不要给实际的LSTM单元命名[没有范围]
  3. 为cudnnCompatible添加with tf.variable_scope("cudnn_lstm"):作用域 阻止
  4. 要保存检查点,请使用不限于培训对象的保护程序 (仔细控制节电器的位置可以做到 实际上,如果您确实需要它)
  5. 还原:好像你有 使用古老的方法进行还原,而不使用元文件。

对于cudnnLSTM和标准LSTM的数学不等式,无可厚非。尽管我确定可以通过一些黑客手段来完成,但仍不确定如何将“忘记门”初始化为1.0。