web-dev-qa-db-ja.com

virtualenvでpythonスクリプトからTensorboardを実行する方法は?

Tensorboardは次のようなコマンドラインから開始する必要があります。

tensorboard --logdir=path

コードから実行する必要があります。今まで私はこれを使います:

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

ただし、テンソルボードはシステムパスに含まれていないため、起動しません。私はPyCharmをWindowsのvirtualenvで使用しています。システムパスを変更したくないので、virtualenvから実行するのが唯一のオプションです。これを行う方法?

20
Na Na

おそらく答えには少し遅れますが、これは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

それが役に立てば幸い。

10
Rive

同じ問題が発生するため、_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()の後にブロックされたくない場合は、別のスレッドを作成することを忘れないでください。宜しくお願いします

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を編集:

テンソルボードのバージョン1.12のElad Weissとtsbertalanによると

_    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()
_

これにより、httpリクエストを妨害することなく、メインプロセスと同時にTensorboardサーバーを実行できます。

7
Romain Cendre

Tensorboard 2 API(2019)の使用:

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

注:tb.launch()は、プロセスが終了すると自動的に終了するデーモンスレッドを作成します。

7
Daniel Braun

別のスレッドでtensorBoardを起動する必要があります。

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

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

あなたの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

それは私にとってはうまくいきます。

2
lovefish

Tensorboard 2.1.0の場合、これは私にとっては機能します:python -m tensorboard.main --logdir $ PWD/logs

まず、envをアクティブにする必要があります。 (私の場合、conda installで致命的なエラーが発生したため、conda内のpipを介してtfを再インストールする必要がありました。)

2

以下はChrome=タブを開き、TensorBoardを起動します。目的のディレクトリとシステム名を指定するだけです。

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

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())
0
Agost Biro

同じ問題がありました:Windowsで作業しているときに、バッチファイルを使用して、以下の例のようにテンソルボードを完全に自動化して開くことができます。

おそらく、目に見えるコンソールウィンドウ(cmd.exe)内でテンソルボードを開きたいので。 IDE(pycharm)内で1つのバッチファイルを呼び出すと、IDE内で実行されるため、バックグラウンドで実行され、コンソールが表示されないため、次の回避策を使用できます。バッチファイルを呼び出し、次にバッチファイルを呼び出してテンソルボードを開始します。

注:この例では、仮想環境として 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

ブラウザが適切に設定される前にすでに開かれているため、ブラウザ内でテンソルボードを更新する必要がある場合があります。

0
Martin

Tensorboard 2(2019)の完全なソリューションで、Chromeブラウザ、Windowsの場合)を自動的に開きます。condaとvirtualenvの両方の環境で機能します。

from multiprocessing import Process
import sys
import os

class TensorboardSupervisor:
    def __init__(self, log_dpath):
        super().__init__()
        if os.name != 'nt':
            raise NotImplementedError("Support only for Windows")
        self.server = TensorboardServer(log_dpath)
        self.chrome = ChromeProcess()
        self.server.start()
        self.chrome.start()

    def finalize(self):
        self.server.join()
        self.chrome.join()


class TensorboardServer(Process):
    def __init__(self, log_dpath):
        super().__init__()
        self.log_dpath= str(log_dpath)

    def run(self):
        # Supress prints to STDERR: 
        os.system(f'{sys.executable} -m tensorboard.main --logdir={self.log_dpath} 2> NUL')


class ChromeProcess(Process):
    def run(self):
        os.system(f'start chrome  http://localhost:6006/')

初期化:

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

トレーニング/テストを終了した後:

tb_sup.finalize()
0
Mano