[英]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
通過pip
內conda
。)
如果你的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.