我有一个在 TensorFlow 1.14 中使用(现已废弃的)tf.keras.layers.CuDNNGRU
层构建的训练模型(在 TensorFlow 2.0 中可在 tf.compat.v1
中找到),我正在尝试将旧层的权重移植到一个使用 tf.keras.layers.GRU
构建的新 TensorFlow 2.0 模型中,以获得一个等效的模型。
这样做的动机之一是能够在 CPU 上进行推理(tf.compat.v1.keras.layers.CuDNNGRU
层只能在 GPU 上运行)。另一个动机是为了模型的未来发展做准备。
问题
我如何将一个训练过的 tf.contrib.v1.keras.layers.CuDNNGRU
层转换为一个等效的 tf.keras.layers.GRU
层?
回答:
在 tensorflow.python.keras.saving.hdf5_format
中的以下私有辅助函数似乎可以解决这个问题。该函数执行更通用的任务,即在 CuDNNGRU
/GRU
和 CuDNNLSTM
/LSTM
格式之间转换权重,因此它不仅仅适用于我的用例。该函数似乎起源于独立的 Keras 中的 这个拉取请求。
...
对于我的用例(将 CuDNNGRU
权重放入 GRU
),使用此函数的解决方案如下:
...
请注意,要使用与 cuDNN 兼容的 tf.keras.layers.GRU
实现,必须 使用特定参数组合(特别是,use_bias=True
)。