Тензор потока в C ++: успешное чтение буфера протокола для модели декодера LSTM-кодера - PullRequest
0 голосов
/ 01 ноября 2019

Я уже давно отлаживаю эту проблему. Я разработал модель декодера LSTM-кодера, которую планирую развернуть на C ++.

Сохраняя модель в формате файла .pb , я могу импортировать модель и данные и развернуть ее в Python. Однако, когда я пытаюсь импортировать график с использованием API C ++, функция TF_GraphImportGraphDef() возвращает код ошибки TF_NOT_FOUND . Я подозреваю, что это потому, что я использую подход поиска луча, и символы для операции GatherTree не содержатся в tensorflow.dll/lib, который я сгенерировал, используя Bazel для окон.

Я хотел бы знать, есликто-нибудь сталкивался с этой проблемой ранее или у нее есть какие-либо решения для этой проблемы.

Было бы возможным установить ссылку на _beam_search_ops.dll? Я тоже это попробовал, используя функцию TF_LoadLibrary(), доступную в c_api.h. Однако мне не удалось загрузить библиотеку.

Любые входные данные будут оценены. Также я работаю с tenorflow версии 1.14.

1 Ответ

0 голосов
/ 02 ноября 2019

Так что я углубился и смог найти решение для следующих проблем, которые позволили мне успешно загрузить сохраненную модель декодера LSTM с API C ++:

Ошибка TF_NOT_FOUND :сообщение об ошибке читается следующим образом: сообщение: тип операции не зарегистрирован 'GatherTree' в двоичном файле, работающем на LAPTOP-5R9P6BHL. Убедитесь, что Op и Kernel зарегистрированы в двоичном файле, запущенном в этом процессе. Обратите внимание, что если вы загружаете сохраненный граф, который использовал операции из tf.contrib, доступ (например) tf.contrib.resampler должен быть выполнен до импорта графика, так как операции ввода операций лениво регистрируются при первом доступе к модулю. На этомНа этой стадии я только связал tenorflow.dll и tenorflow.lib с моим C ++ проектом. Возможное решение состояло в том, чтобы связать библиотеку, которая содержит определение для Gather Tree op , которое было _beam_search_ops.dll .

_beam_search_ops.dll не найденоошибка : эта ошибка наблюдалась при попытке загрузить библиотеку с помощью TF_LoadLibrary () из c_api.h. После просмотра некоторых сообщений о переполнении стека казалось, что библиотека зависит от библиотек 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 были созданы с помощью tenorflow V1.13, tenorflow.dll / lib и * 1032Файл * .pb создается с помощью tenorflow V1.14. Когда я связал _beam_search_ops.dll и _pywrap_tensorflow_internal.pyd из версии tenorflow V1.14, загрузка графика прошла успешно, и я смог прочитать содержимое графика.

Если у кого-то есть лучшее решение для этой проблемы, пожалуйста, опубликуйте его здесь. Спасибо.

...