如何在virtualenv中从python scipt运行Tensorboard?

Na *_* Na 17 python virtualenv anaconda tensorboard

Tensorboard应该从commnad行开始,如:

tensorboard --logdir=path
Run Code Online (Sandbox Code Playgroud)

我需要从代码中运行它.到现在为止我用这个:

import os
os.system('tensorboard --logdir=' + path)
Run Code Online (Sandbox Code Playgroud)

但是,由于未包含在系统路径中,因此张贴板无法启动.我在Windows上使用PyCharm和virtualenv.我不想更改系统路径,因此唯一的选择是从virtualenv运行它.这该怎么做?

Riv*_*ive 10

答案可能有点晚了,但这对我在Python 3.6.2中有用:

import tensorflow as tf
from tensorboard import main as tb
tf.flags.FLAGS.logdir = "/path/to/graphs/"
tb.main()
Run Code Online (Sandbox Code Playgroud)

它使用默认配置运行tensorboard,并在"/ path/to/graphs /"中查找图形和摘要.您当然可以使用以下命令更改日志目录并设置任意数量的变量:

tf.flags.FLAGS.variable = value
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 目前(tb版本1.10.0,版本1.9.0),以这种方式设置标志会抛出`UnrecognizedFlagError`.如果我通过首先调用`.DEFINE_string(...)`来设置它们,tb仍然看不到它们并且因为`ValueError失败:必须指定logdir或db.是不是有一种从python中调用tb的"有效"方法? (5认同)

Dan*_*aun 9

使用Tensorboard 2 API(2019):

from tensorboard import program
tb = program.TensorBoard()
tb.configure(argv=[None, '--logdir', tracking_address])
url = tb.launch()
Run Code Online (Sandbox Code Playgroud)

注意:tb.launch()创建一个守护进程线程,该线程将在进程完成时自动终止

  • 关于如何抑制/重定向输出以便它不会显示在标准输出中的任何想法? (2认同)

Rom*_*dre 7

当我遇到同样的问题时,您可以使用以下受启发的行tensorboard\main.py

from tensorboard import default
from tensorboard import program

tb = program.TensorBoard(default.PLUGIN_LOADERS, default.get_assets_zip_provider())
tb.configure(argv=['--logdir', my_directory])
tb.main()
Run Code Online (Sandbox Code Playgroud)

my_directory作为要检查的文件夹。如果您想避免在之后被阻塞,不要忘记创建一个单独的线程tb.main()。最好的祝福

编辑Tensorboard V1.10:

由于某些个人原因,我用另一种方式写它:

class TensorBoardTool:

    def __init__(self, dir_path):
        self.dir_path = dir_path

    def run(self):
        # Remove http messages
        log = logging.getLogger('werkzeug')
        log.setLevel(logging.ERROR)
        # Start tensorboard server
        tb = program.TensorBoard(default.PLUGIN_LOADERS, default.get_assets_zip_provider())
        tb.configure(argv=['--logdir', self.dir_path])
        url = tb.launch()
        sys.stdout.write('TensorBoard at %s \n' % url)
Run Code Online (Sandbox Code Playgroud)

编辑Tensorboard V1.12:

根据Elad Weiss和tsbertalan所描述的张量板的1.12版本。

    def run(self):
        # Remove http messages
        log = logging.getLogger('werkzeug').setLevel(logging.ERROR)
        # Start tensorboard server
        tb = program.TensorBoard(default.get_plugins(), default.get_assets_zip_provider())
        tb.configure(argv=[None, '--logdir', self.dir_path])
        url = tb.launch()
        sys.stdout.write('TensorBoard at %s \n' % url)
Run Code Online (Sandbox Code Playgroud)

然后运行它即可:

# Tensorboard tool launch
tb_tool = TensorBoardTool(work_dir)
tb_tool.run()
Run Code Online (Sandbox Code Playgroud)

这将使您可以在与主进程同时运行Tensorboard服务器,而不会打扰http请求!


Dmi*_*try 6

你应该tensorBoard在单独的线程中启动:

def launchTensorBoard():
    import os
    os.system('tensorboard --logdir=' + tensorBoardPath)
    return

import threading
t = threading.Thread(target=launchTensorBoard, args=([]))
t.start()
Run Code Online (Sandbox Code Playgroud)

  • 这在环境中不起作用,因为`os.system`尚未激活特定的环境名称(至少对于Windows而言,这仍然无法工作) (2认同)

Mic*_*erg 6

对于 Tensorboard 2.1.0,这对我有用:

python -m tensorboard.main --logdir $PWD/logs
Run Code Online (Sandbox Code Playgroud)

你必须先让你的 env 处于活动状态。(就我而言,conda install有一个致命错误,所以我需要tf通过pipinside重新安装conda。)


Man*_*ano 5

Tensorboard 2 (2019) 的完整解决方案,可自动打开 Chrome 浏览器,适用于 Windows 和 Linux。适用于两种环境:conda 和 virtualenv。该解决方案抑制 Tensorboard 输出,因此它不会(令人恼火地)显示在标准输出中

from multiprocessing import Process
import sys
import os

class TensorboardSupervisor:
    def __init__(self, log_dp):
            self.server = TensorboardServer(log_dp)
            self.server.start()
            print("Started Tensorboard Server")
            self.chrome = ChromeProcess()
            print("Started Chrome Browser")
            self.chrome.start()

    def finalize(self):
        if self.server.is_alive():
            print('Killing Tensorboard Server')
            self.server.terminate()
            self.server.join()
        # As a preference, we leave chrome open - but this may be amended similar to the method above


class TensorboardServer(Process):
    def __init__(self, log_dp):
        super().__init__()
        self.os_name = os.name
        self.log_dp = str(log_dp)
        # self.daemon = True

    def run(self):
        if self.os_name == 'nt':  # Windows
            os.system(f'{sys.executable} -m tensorboard.main --logdir "{self.log_dp}" 2> NUL')
        elif self.os_name == 'posix':  # Linux
            os.system(f'{sys.executable} -m tensorboard.main --logdir "{self.log_dp}" '
                      f'--host `hostname -I` >/dev/null 2>&1')
        else:
            raise NotImplementedError(f'No support for OS : {self.os_name}')
    
    
class ChromeProcess(Process):
    def __init__(self):
        super().__init__()
        self.os_name = os.name
        self.daemon = True

    def run(self):
        if self.os_name == 'nt':  # Windows
            os.system(f'start chrome  http://localhost:6006/')
        elif self.os_name == 'posix':  # Linux
            os.system(f'google-chrome http://localhost:6006/')
        else:
            raise NotImplementedError(f'No support for OS : {self.os_name}')
Run Code Online (Sandbox Code Playgroud)

初始化:

tb_sup = TensorboardSupervisor('path/to/logs')
Run Code Online (Sandbox Code Playgroud)

完成训练/测试后:

tb_sup.finalize()
Run Code Online (Sandbox Code Playgroud)


小智 -2

尝试从 python 运行

import os
os.system('python -m tensorflow.tensorboard --logdir=' + path)
Run Code Online (Sandbox Code Playgroud)

在 PyCharm 中对我有用(但在 Linux 上,所以如果 shell 语法不同,那么你必须调整它)