Как перенести tf.Session на вызов tf.train.MonitoredSession, допуская изменения графа - PullRequest
0 голосов
/ 30 сентября 2019

Код, над которым я работаю: this .
Код использует вызов tf.session для получения графика для задач обнаружения объектов. Ссылка
Моя цель состоит в том, чтобы профилировать этот код для графических процессоров Nvidia с помощью nvtx-plugins-tf для анализа времени, затраченного на различные операции. Ссылка на документы

Библиотека плагинов обеспечивает функцию перехвата для tf.train.MonitoredSession, как указано в их примере кода здесь .
Код, связанный вышеиспользует tf.session вместе с tf.config, и когда я пытаюсь изменить вызов tf.session на вызов tf.train.MonitoredSession, я не могу заставить свой код работать, и он завершается с ошибкой, что граф не можетбыть изменены. Я просмотрел API-интерфейсы tenorflow и оказалось, что tf.session не поддерживает обратные вызовы ловушек, а tf.train.MonitoredSession не поддерживает tf_config в качестве аргумента функции.

Traceback (most recent call last):
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/mayroy13/Mayank/Mayank/test/tensorrt/tftrt/examples/object_detection/test.py", line 105, in <module>
    test(args.test_config_path)
  File "/home/mayroy13/Mayank/Mayank/test/tensorrt/tftrt/examples/object_detection/test.py", line 81, in test
    **test_config['benchmark_config'])
  File "/home/mayroy13/Mayank/Mayank/test/tensorrt/tftrt/examples/object_detection/object_detection.py", line 608, in benchmark_model
    tf.import_graph_def(frozen_graph, name='')
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/site-packages/tensorflow/python/util/deprecation.py", line 507, in new_func
    return func(*args, **kwargs)
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/site-packages/tensorflow/python/framework/importer.py", line 443, in import_graph_def
    _ProcessNewOps(graph)
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/site-packages/tensorflow/python/framework/importer.py", line 236, in _ProcessNewOps
    for new_op in graph._add_new_tf_operations(compute_devices=False):  # pylint: disable=protected-access
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3751, in _add_new_tf_operations
    for c_op in c_api_util.new_tf_operations(self)
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3751, in <listcomp>
    for c_op in c_api_util.new_tf_operations(self)
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3640, in _create_op_from_tf_operation
    self._check_not_finalized()
  File "/home/mayroy13/anaconda3/envs/trt-py36/lib/python3.6/site-packages/tensorflow/python/framework/ops.py", line 3225, in _check_not_finalized
    raise RuntimeError("Graph is finalized and cannot be modified.")
RuntimeError: Graph is finalized and cannot be modified.

Любые указания, по которым нужно идтибудет оценено. Если в тензорном потоке есть способы использовать хуки в сочетании с tf.session, это также будет работать для меня.

1 Ответ

0 голосов
/ 15 октября 2019

Причина может быть в том, что MonitoredTrainingSession завершает (останавливает) график, вам может потребоваться инициализация графика в цикле, вы можете использовать функцию для создания нового графика поверх цикла.

import tensorflow as tf
tf.reset_default_graph()
tf.Graph().as_default()
...