簡體   English   中英

如何在virtualenv中從python scipt運行Tensorboard?

[英]How to run Tensorboard from python scipt in virtualenv?

Tensorboard 應該從這樣的 commnad 行開始:

tensorboard --logdir=path

我需要從代碼運行它。 直到現在我使用這個:

import os
os.system('tensorboard --logdir=' + path)

但是 tensorboard 不會啟動,因為它不包含在系統路徑中。 我在 Windows 上使用 PyCharm 和 virtualenv。 我不想更改系統路徑,所以唯一的選擇是從 virtualenv 運行它。 這該怎么做?

使用 Tensorboard 2 API(2019):

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

注意:tb.launch() 創建一個守護線程,當你的進程完成時它會自動終止

答案可能有點晚了,但這就是在 Python 3.6.2 中對我有用的方法:

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

它使用默認配置運行張量板,並在“/path/to/graphs/”中查找圖形和摘要。 您當然可以更改日志目錄並設置盡可能多的變量:

tf.flags.FLAGS.variable = value

希望能幫助到你。

當我遇到同樣的問題時,您可以使用受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()

my_directory作為您要檢查的文件夾。 如果您想避免在tb.main()之后被阻塞, 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)

編輯 Tensorboard V1.12:

根據 Elad Weiss 和 tsbertalan 對 tensorboard 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)

然后運行它只需執行以下操作:

# Tensorboard tool launch
tb_tool = TensorBoardTool(work_dir)
tb_tool.run()

這將允許您在主進程的同時運行 Tensorboard 服務器,而不會干擾 http 請求!

您應該在單獨的線程中啟動tensorBoard

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

import threading
t = threading.Thread(target=launchTensorBoard, args=([]))
t.start()

對於 Tensorboard 2.1.0,這對我有用:

python -m tensorboard.main --logdir $PWD/logs

你必須先讓你的 env 處於活動狀態。 (在我的情況下, conda install有一個致命的錯誤,所以我需要重新安裝tf通過pipconda 。)

如果你的python解釋器路徑是:

/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/bin/python3.6

您可以運行此命令而不是 tensorboard

/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/tensorboard/main.py 

從 TensorBoard 1.9.0 版開始,以下工作可以在同一 Python 進程中使用默認設置啟動 TensorBoard:

import tensorboard as tb
import tensorboard.program
import tensorboard.default

tb.program.FLAGS.logdir = 'path/to/logdir'
tb.program.main(tb.default.get_plugins(),
                tb.default.get_assets_zip_provider())

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}')

初始化:

tb_sup = TensorboardSupervisor('path/to/logs')

完成訓練/測試后:

tb_sup.finalize()

要在指定的虛擬環境中從 python 腳本運行 tensorboard,您必須將tensorboard更改為/path/to/your/environment/bin/tensorboard 還建議按照@Dmitry 的建議在單獨的線程中執行命令。

它看起來像這樣,並且在 tb 和 tf 版本 1.14.0 中對我有用:

def run_tensorboard(logdir_absolute):

   import os, threading
   tb_thread = threading.Thread(
          target=lambda: os.system('/home/username/anaconda3/envs/'
                                   'env_name/bin/tensorboard '
                                   '--logdir=' + logdir_absolute),
          daemon=True)
   tb_thread.start()

以下將打開一個 Chrome 選項卡並啟動 TensorBoard。 只需提供所需的目錄和您的系統名稱。

import os
os.system(
    "cd <directory> \
    && google-chrome http://<your computer name>:6007 \
    && tensorboard --port=6007 --logdir runs"
) 

有同樣的問題:當您在 Windows 上工作時,您可以使用批處理文件來全自動打開 tensorboard,如下面的示例所示。

因為您可能想在可見的控制台窗口 (cmd.exe) 中打開 tensorboard。 在您的 IDE (pycharm) 中調用一個批處理文件將在 IDE 中運行它,因此在后台,這意味着您看不到控制台。 因此,您可以使用一種解決方法:調用一個批處理文件,然后調用該批處理文件來啟動 tensorboard。

注意:我在這個例子中使用Anaconda作為我的虛擬環境

batch_filename = 'start_tb.bat'  # set filename for batch file
tb_command = 'tensorboard --logdir=' + log_dir  # join strings for tensorflow command

# creates batch file that will call seconds batch file in console window (cmd.exe)
with open(os.path.join('invoke.bat'), "w") as f:
    f.writelines('start ' + batch_filename)

# created batch file that activates Anaconda environment and starts tensorboard
with open(os.path.join(batch_filename), "w") as f:
    f.writelines('\nconda activate YOURCondaEnvNAME  && ' + tb_command)  # change to your conda environment, or other virtualenv

# starts tensorboard using the batch files (will open console window)
# calls the 'invoke.bat' that will call 'start_tb.bat'
os.system('invoke.bat')

# starts tensorboard in default browser >> ATTENTION: must be adapted to local host
os.system('start "" http://YOUR-COMPUTER-NAME:6006/')  # just copy the URL that tensorboard runs at on your computer

有時您可能需要在瀏覽器中刷新 tensorboard,因為它在正確設置之前就已經打開了。

嘗試從 python 運行

import os
os.system('python -m tensorflow.tensorboard --logdir=' + path)

在 PyCharm 中對我有用(但在 linux 上,所以如果 shell 語法不同,那么你必須調整它)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM