Tensorflow cudnnLSTM赢得';t还原到cudnnCompatibleLSTM

Tensorflow cudnnLSTM赢得';t还原到cudnnCompatibleLSTM,tensorflow,Tensorflow,我正在尝试用TF1.9/1.10在GPU机器(AWS p3x2,Volta)上训练一个基本网络。不是Keras,只是TF 基于[相当有限的]文档,我的目标是使用cudnnLSTM单元进行训练,保存检查点,然后在CPU上进行恢复以进行推断。根据这个目标,我认为cudnnCompatibleLSTM是一种可行的方法,因为它应该吸收GPU特定LSTM实现的权重 无论我如何尝试,都会出现以下错误: NotFoundError (see above for traceback): Key caseTest

我正在尝试用TF1.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分离

有人有线索吗?

一些答案:

假设您已经阅读了关于cudnnLSTM+cudnnCompatibleLSTM的文档[遗憾的是,主要是代码中的文档]

  • 构建两个图形备选方案,每个一个
  • 不要给实际的LSTM单元格命名[无作用域]
  • 使用tf.variable\u scope(“cudnn\u lstm”)添加
    cudnnCompatible的作用域 挡块
  • 要保存检查点,请使用不限于可培训内容的保存程序 (仔细控制节电器的位置即可 (事实上,如果你真的需要的话)
  • 恢复:好像你有 使用古老的方法进行恢复,而不是使用元文件

  • 关于cudnnLSTM和标准LSTM的数学不等价性,没有什么好说的。目前还不确定如何将忘记门初始化为1.0,尽管我确信这可以通过一些黑客操作来完成。

    顺便说一句,在我当前的体系结构上(在LSTM层之后有一个重要的DNN),性能增益[在was p3x2上]并不像宣传的那样显著。cudnnLSTM nased网络比CudnnCompatible快2-3倍[训练!],仅比基于块融合的网络快1.5-2.5倍。标准LSTMCell的性能略低于CudnnCompatible版本。