Использовать функцию активации из аддонов Tensorflow в сохраненной модели - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть модель Tensorflow 2, которую я обучил с помощью активации GeLU из аддонов тензорного потока , которую я хочу экспортировать для использования с обслуживанием тензорного потока.

После того, как я экспортирую модель с tf.saved_model.save(...), я использую saved_model_cli в качестве проверки работоспособности, чтобы убедиться, что конечные точки были созданы правильно.

Запуск saved_model_cli show --dir ./export_dir/ --all приводит к следующей ошибке:

Traceback (most recent call last):
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 3708, in _get_op_def
    return self._op_def_cache[type]
KeyError: 'Addons>Gelu'



During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/miniconda3/envs/my_env/bin/saved_model_cli", line 8, in <module>
    sys.exit(main())
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/tools/saved_model_cli.py", line 990, in main
    args.func(args)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/tools/saved_model_cli.py", line 691, in show
    _show_all(args.dir)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/tools/saved_model_cli.py", line 283, in _show_all
    _show_defined_functions(saved_model_dir)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/tools/saved_model_cli.py", line 176, in _show_defined_functions
    trackable_object = load.load(saved_model_dir)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 528, in load
    return load_internal(export_dir, tags)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 552, in load_internal
    export_dir)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/saved_model/load.py", line 114, in __init__
    meta_graph.graph_def.library))
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/saved_model/function_deserialization.py", line 312, in load_function_def_library
    func_graph = function_def_lib.function_def_to_graph(copy)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/framework/function_def_to_graph.py", line 59, in function_def_to_graph
    fdef, input_shapes)
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/framework/function_def_to_graph.py", line 218, in function_def_to_graph_def
    op_def = default_graph._get_op_def(node_def.op)  # pylint: disable=protected-access
  File "/home/miniconda3/envs/my_env/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 3712, in _get_op_def
    c_api.TF_GraphGetOpDef(self._c_graph, compat.as_bytes(type), buf)
tensorflow.python.framework.errors_impl.NotFoundError: Op type not registered 'Addons>Gelu' in binary running on Y01521. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) `tf.contrib.resampler` should be done before importing the graph, as contrib ops are lazily registered when the module is first accessed.

Я предполагаю, что это предотвратит загрузку модели и в TF Serving.

Есть ли способ экспортировать модель таким образом, что мне не нужно регистрироваться тип оп после факта (как следует из сообщения об ошибке)? Если нет, то как мне go сделать это?

...