因此,我深入挖掘并设法找到了以下问题的解决方案,这使我能够使用 C++ api 成功加载 LSTM 编码器解码器保存的模型:
TF_NOT_FOUND 错误:错误消息如下:消息:操作类型未在 LAPTOP-5R9P6BHL 上运行的二进制文件中注册“GatherTree”。确保在此进程中运行的二进制文件中注册了 Op 和 Kernel。请注意,如果您正在加载使用来自 tf.contrib 的操作的已保存图,tf.contrib.resampler
则应在导入图之前完成访问(例如),因为首次访问模块时会延迟注册 contrib 操作。在这个阶段,我只将 tensorflow.dll 和 tensorflow.lib 链接到我的 C++ 项目。一个可能的解决方案是链接包含Gather Tree op定义的库,即_beam_search_ops.dll。
_beam_search_ops.dll 未找到错误:尝试使用c_api.h 中的TF_LoadLibrary()加载库时出现此错误。在查看了一些关于堆栈溢出的帖子后,似乎该库依赖于python37.dll和_pywrap_tensorflow_internal.pyd库。在链接这两个库之后,我成功地加载了_beam_search_ops.dll。
TF_INVALID_ARGUMENT 错误:即使在加载_beam_search_ops.dll库后,图形导入也因无效参数错误而失败。在阅读错误消息时,我意识到这是由于_beam_search_ops.dll和_pywrap_tensorflow_internal.pyd是使用 tensorflow V1.13 生成的,而 tensorflow.dll/lib 和.pb文件是使用 tensorflow V1.14 生成的。当我从 tensorflow V1.14 版本链接_beam_search_ops.dll和_pywrap_tensorflow_internal.pyd时,图表的加载成功并且我能够读取图表的内容。
如果有人对此问题有更好的解决方案,请在此处发布。谢谢你。