Почему я получаю «_curses.error: cbreak () вернул ERR» при использовании отладчика TensorFlow CLI? - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь использовать отладчик TensorFlow CLI для определения операции, которая вызывает NaN во время обучения сети, но когда я пытаюсь запустить код, я получаю ошибку:

_curses.error: cbreak() returned ERR

Я запускаю код на сервере Ubuntu, к которому подключаюсь через SSH, и попытался выполнить это руководство .

Я пыталсяиспользуя tf.add_check_numerics_ops(), но слои в сети включают циклы while, поэтому они не совместимы.Это раздел кода, где возникает ошибка:

import tensorflow as tf
from tensorflow.python import debug as tf_debug
...
#Prepare data
train_data, val_data, test_data = dataset.prepare_datasets(model_config)

sess = tf.Session()
sess = tf_debug.LocalCLIDebugWrapperSession(sess)

# Create iterators
handle = tf.placeholder(tf.string, shape=[])
iterator = tf.data.Iterator.from_string_handle(handle, train_data.output_types, train_data.output_shapes)
mixed_spec, voice_spec, mixed_audio, voice_audio = iterator.get_next()

training_iterator = train_data.make_initializable_iterator()
validation_iterator = val_data.make_initializable_iterator()
testing_iterator = test_data.make_initializable_iterator()

training_handle = sess.run(training_iterator.string_handle())
...

и полная ошибка:

Traceback (most recent call last):
  File "main.py", line 64, in <module>
    @ex.automain
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/sacred/experiment.py", line 137, in automain
    self.run_commandline()
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/sacred/experiment.py", line 260, in run_commandline
    return self.run(cmd_name, config_updates, named_configs, {}, args)
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/sacred/experiment.py", line 209, in run
    run()
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/sacred/run.py", line 221, in __call__
    self.result = self.main_function(*args)
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/sacred/config/captured_function.py", line 46, in captured_function
    result = wrapped(*args, **kwargs)
  File "main.py", line 95, in do_experiment
    training_handle = sess.run(training_iterator.string_handle())
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/tensorflow/python/debug/wrappers/framework.py", line 455, in run
    is_callable_runner=bool(callable_runner)))
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/tensorflow/python/debug/wrappers/local_cli_wrapper.py", line 255, in on_run_start
    self._run_start_response = self._launch_cli()
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/tensorflow/python/debug/wrappers/local_cli_wrapper.py", line 431, in _launch_cli
    title_color=self._title_color)
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/tensorflow/python/debug/cli/curses_ui.py", line 492, in run_ui
    self._screen_launch(enable_mouse_on_start=enable_mouse_on_start)
  File "/home/enterprise.internal.city.ac.uk/acvn728/.local/lib/python3.5/site-packages/tensorflow/python/debug/cli/curses_ui.py", line 445, in _screen_launch
    curses.cbreak()
_curses.error: cbreak() returned ERR

Я довольно новичок в использовании Ubuntu (и TensorFlow),но, насколько я могу судить, на сервере установлены ncurses, что должно позволить использовать интерфейс на основе curses:

acvn728@america:~/MScFinalProject$ dpkg -l '*ncurses*' | grep '^ii'
ii  libncurses5:amd64  6.0+20160213-1ubuntu1 amd64        shared libraries for terminal handling
ii  libncursesw5:amd64 6.0+20160213-1ubuntu1 amd64        shared libraries for terminal handling (wide character support)
ii  ncurses-base       6.0+20160213-1ubuntu1 all          basic terminal type definitions
ii  ncurses-bin        6.0+20160213-1ubuntu1 amd64        terminal-related programs and man pages
ii  ncurses-term       6.0+20160213-1ubuntu1 all          additional terminal type definitions

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Проблема решена!Решением было изменить

sess = tf_debug.LocalCLIDebugWrapperSession(sess)

на

sess = tf_debug.LocalCLIDebugWrapperSession(sess, ui_type="readline")

Это похоже на решение этого вопроса , но я думаю, что важно отметить, что ониотличаются, потому что а) это относится к другой функции и другому API и б) я не пытался запустить из IDE, как упоминалось в этом решении.

0 голосов
/ 11 октября 2018

cbreak вернет ERR, если вы запустите приложение curses, которое не на реальном терминале (то есть что-то, что работает с вызовами POSIX termios ).

Из описания

но слои в сети включают в себя циклы while, поэтому они несовместимы

это не похоже на васработают в терминале.

...