我可以将 TensorBoard 与 Google Colab 一起使用吗?

Can I use TensorBoard with Google Colab?

在 Google Colab 上训练 TensorFlow 模型时,有什么方法可以使用 TensorBoard 吗?

以下是如何在 Google Colab 上内联显示模型。下面是一个显示占位符的非常简单的示例:

from IPython.display import clear_output, Image, display, HTML
import tensorflow as tf
import numpy as np
from google.colab import files

def strip_consts(graph_def, max_const_size=32):
    """Strip large constant values from graph_def."""
    strip_def = tf.GraphDef()
    for n0 in graph_def.node:
        n = strip_def.node.add() 
        n.MergeFrom(n0)
        if n.op == 'Const':
            tensor = n.attr['value'].tensor
            size = len(tensor.tensor_content)
            if size > max_const_size:
                tensor.tensor_content = "<stripped %d bytes>"%size
    return strip_def

def show_graph(graph_def, max_const_size=32):
    """Visualize TensorFlow graph."""
    if hasattr(graph_def, 'as_graph_def'):
        graph_def = graph_def.as_graph_def()
    strip_def = strip_consts(graph_def, max_const_size=max_const_size)
    code = """
        <script>
          function load() {{
            document.getElementById("{id}").pbtxt = {data};
          }}
        </script>
        <link rel="import" href="https://tensorboard.appspot.com/tf-graph-basic.build.html" onload=load()>
        <div style="height:600px">
          <tf-graph-basic id="{id}"></tf-graph-basic>
        </div>
    """.format(data=repr(str(strip_def)), id='graph'+str(np.random.rand()))

    iframe = """
        <iframe seamless style="width:1200px;height:620px;border:0" srcdoc="{}"></iframe>
    """.format(code.replace('"', '&quot;'))
    display(HTML(iframe))


"""Create a sample tensor"""
sample_placeholder= tf.placeholder(dtype=tf.float32) 
"""Show it"""
graph_def = tf.get_default_graph().as_graph_def()
show_graph(graph_def)

目前,您无法 运行 Google Colab 上的 Tensorboard 服务,就像您在本地 运行 它一样。此外,您不能通过 summary_writer = tf.summary.FileWriter('./logs', graph_def=sess.graph_def) 之类的方式将整个日志导出到您的云端硬盘,以便您可以下载并在本地查看。

编辑:您可能想试试官方 %tensorboard magic,从 TensorFlow 1.13 开始可用。


%tensorboard 魔法存在之前,标准的方法是 实现这一点是将网络流量代理到 Colab VM 使用 ngrok. A Colab example can be found here.

这些是步骤(代码片段表示 colab 中 "code" 类型的单元格):

  1. 在后台获取 TensorBoard 运行。
    灵感来自 .

    LOG_DIR = '/tmp/log'
    get_ipython().system_raw(
        'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
        .format(LOG_DIR)
    )
    
  2. 下载并解压 ngrok
    将传递给 wget 的 link 替换为适合您 OS 的正确下载 link。

    ! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
    ! unzip ngrok-stable-linux-amd64.zip
    
  3. 启动 ngrok 后台进程...

    get_ipython().system_raw('./ngrok http 6006 &')
    

    ...并检索 public url。 Source

    ! curl -s http://localhost:4040/api/tunnels | python3 -c \
        "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
    

这是在 Google Colab 上执行相同 ngrok 隧道方法的更简单方法。

!pip install tensorboardcolab

那么,

from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback

tbc=TensorBoardColab()

假设您使用的是 Keras:

model.fit(......,callbacks=[TensorBoardColabCallback(tbc)])

可以看原文posthere.

TensorBoard for TensorFlow 运行 在 Google Colab 上使用 tensorboardcolab。这在内部使用 ngrok 进行隧道传输。

  1. 安装 TensorBoardColab

!pip install tensorboardcolab

  1. 创建一个 tensorboardcolab 对象

tbc = TensorBoardColab()

这会自动创建一个可以使用的 TensorBoard link。此 Tensorboard 正在读取“./Graph”

中的数据
  1. 创建指向此位置的 FileWriter

summary_writer = tbc.get_writer()

tensorboardcolab 库具有 returns FileWriter 对象指向上方 './Graph' 位置的方法。

  1. 使用summary_writer对象
  2. 开始向“./Graph”位置的事件文件添加摘要信息

您可以添加标量信息或图形或直方图数据。

参考:https://github.com/taomanwai/tensorboardcolab

我使用 google 驱动器的备份和同步 https://www.google.com/drive/download/backup-and-sync/。在训练期间定期保存在我的 google 驱动器中的事件文件会自动同步到我自己计算机上的文件夹中。我们称此文件夹为 logs。要访问 tensorboard 中的可视化,我打开命令提示符,导航到同步的 google 驱动器文件夹,然后键入:tensorboard --logdir=logs.

因此,通过自动将我的驱动器与我的计算机同步(使用备份和同步),我可以像在自己的计算机上训练一样使用 tensorboard。

编辑: 这是一个可能有用的笔记本。 https://colab.research.google.com/gist/MartijnCa/961c5f4c774930f4bdd32d51829da6f6/tensorboard-with-google-drive-backup-and-sync.ipynb

我尝试了但没有得到结果但是当如下使用时,得到了结果

import tensorboardcolab as tb
tbc = tb.TensorBoardColab()

在此之后从输出中打开 link。

import tensorflow as tf
import numpy as np

显式创建一个 Graph 对象

graph = tf.Graph()
with graph.as_default()

完整示例:

with tf.name_scope("variables"):
    # Variable to keep track of how many times the graph has been run
    global_step = tf.Variable(0, dtype=tf.int32, name="global_step")
    
    # Increments the above `global_step` Variable, should be run whenever the graph is run
    increment_step = global_step.assign_add(1)
    
    # Variable that keeps track of previous output value:
    previous_value = tf.Variable(0.0, dtype=tf.float32, name="previous_value")

# Primary transformation Operations
with tf.name_scope("exercise_transformation"):
    
    # Separate input layer
    with tf.name_scope("input"):
        # Create input placeholder- takes in a Vector 
        a = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_a")

    # Separate middle layer
    with tf.name_scope("intermediate_layer"):
        b = tf.reduce_prod(a, name="product_b")
        c = tf.reduce_sum(a, name="sum_c")
    
    # Separate output layer
    with tf.name_scope("output"):
        d = tf.add(b, c, name="add_d")
        output = tf.subtract(d, previous_value, name="output")
        update_prev = previous_value.assign(output)

# Summary Operations
with tf.name_scope("summaries"):
    tf.summary.scalar('output', output)  # Creates summary for output node
    tf.summary.scalar('product of inputs', b, )
    tf.summary.scalar('sum of inputs', c)

# Global Variables and Operations
with tf.name_scope("global_ops"):
    # Initialization Op
    init = tf.initialize_all_variables()
    # Collect all summary Ops in graph
    merged_summaries = tf.summary.merge_all()

# Start a Session, using the explicitly created Graph
sess = tf.Session(graph=graph)

# Open a SummaryWriter to save summaries
writer = tf.summary.FileWriter('./Graph', sess.graph)

# Initialize Variables
sess.run(init)

def run_graph(input_tensor):
    """
    Helper function; runs the graph with given input tensor and saves summaries
    """
    feed_dict = {a: input_tensor}
    output, summary, step = sess.run([update_prev, merged_summaries, increment_step], feed_dict=feed_dict)
    writer.add_summary(summary, global_step=step)


# Run the graph with various inputs
run_graph([2,8])
run_graph([3,1,3,3])
run_graph([8])
run_graph([1,2,3])
run_graph([11,4])
run_graph([4,1])
run_graph([7,3,1])
run_graph([6,3])
run_graph([0,2])
run_graph([4,5,6])

# Writes the summaries to disk
writer.flush()

# Flushes the summaries to disk and closes the SummaryWriter
writer.close()

# Close the session
sess.close()

# To start TensorBoard after running this file, execute the following command:
# $ tensorboard --logdir='./improved_graph'

还有一个替代解决方案,但我们必须使用 TFv2.0 预览版。因此,如果您没有迁移问题,请尝试以下操作:

为 GPU 或 CPU 安装 tfv2.0(TPU 尚不可用)

CPU
tf-nightly-2.0-preview
GPU
tf-nightly-gpu-2.0-preview

%%capture
!pip install -q tf-nightly-gpu-2.0-preview
# Load the TensorBoard notebook extension
# %load_ext tensorboard.notebook # For older versions
%load_ext tensorboard

照常导入 TensorBoard:

from tensorflow.keras.callbacks import TensorBoard

清理或创建用于保存日志的文件夹(运行 这行在 运行 培训 fit() 之前)

# Clear any logs from previous runs
import time

!rm -R ./logs/ # rf
log_dir="logs/fit/{}".format(time.strftime("%Y%m%d-%H%M%S", time.gmtime()))
tensorboard = TensorBoard(log_dir=log_dir, histogram_freq=1)

玩得开心 TensorBoard! :)

%tensorboard --logdir logs/fit

Here the official colab notebook and the repo 在 github

新的 TFv2.0 alpha 版本:

CPU
!pip install -q tensorflow==2.0.0-alpha0 GPU
!pip install -q tensorflow-gpu==2.0.0-alpha0

加入@solver149 的回答,这里有一个如何在 google colab

中使用 TensorBoard 的简单示例

1.Create 图形,例如:

a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0) 
total = a + b

2。安装 Tensorboard

!pip install tensorboardcolab # to install tensorboeadcolab if it does not it not exist

==> 我的结果:

Requirement already satisfied: tensorboardcolab in /usr/local/lib/python3.6/dist-packages (0.0.22)

3。使用它:)

首先从 tensorboaedcolab 导入 TensorBoard(您可以使用 import* 一次导入所有内容),然后创建您的 tensorboeardcolab,然后像这样附加一个编写器:

from tensorboardcolab import * 
tbc = TensorBoardColab() # To create a tensorboardcolab object it will automatically creat a link
writer = tbc.get_writer() # To create a FileWriter
writer.add_graph(tf.get_default_graph()) # add the graph 
writer.flush()

==> 结果

Using TensorFlow backend.

Wait for 8 seconds...
TensorBoard link:
http://cf426c39.ngrok.io

4.Check 给定的 link :D

此示例来自 TF 指南:TensorBoard

我今天尝试在 google colab 上展示 TensorBoard,

# in case of CPU, you can this line
# !pip install -q tf-nightly-2.0-preview
# in case of GPU, you can use this line
!pip install -q tf-nightly-gpu-2.0-preview

# %load_ext tensorboard.notebook  # not working on 22 Apr
%load_ext tensorboard # you need to use this line instead

import tensorflow as tf

'################
训练
'################

# show tensorboard
%tensorboard --logdir logs/fit

这里是google做的实际例子。 https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/r2/get_started.ipynb

TensorBoard 适用于 Google Colab 和 TensorFlow 2.0

!pip install tensorflow==2.0.0-alpha0 
%load_ext tensorboard.notebook

到目前为止我找到的最简单的方法:

使用 wget

获取 setup_google_colab.py 文件
!wget https://raw.githubusercontent.com/hse-aml/intro-to- dl/master/setup_google_colab.py -O setup_google_colab.py
import setup_google_colab

到后台的运行 tensorboard,暴露端口并点击link。
我假设您有适当的附加值可以在您的摘要中可视化,然后合并所有摘要。

import os
os.system("tensorboard --logdir=./logs --host 0.0.0.0 --port 6006 &")
setup_google_colab.expose_port_on_colab(6006)

在 运行 执行上述语句后,您将收到 link 提示,例如:

Open https://a1b2c34d5.ngrok.io to access your 6006 port

参考以下 git 以获得进一步的帮助:

https://github.com/MUmarAmanat/MLWithTensorflow/blob/master/colab_tensorboard.ipynb

当然可以,在 google colab 中使用 tensorboard 非常简单。按照以下步骤-

1) 加载张量板扩展

%load_ext tensorboard.notebook

2) 添加到keras回调

tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)

3) 启动tensorboard

%tensorboard — logdir logs

希望对您有所帮助。

此处的许多答案现已过时。我相信几周后也会是我的。但在撰写本文时,我所要做的就是 运行 来自 colab 的这些代码行。 tensorboard 打开就好了。

%load_ext tensorboard
%tensorboard --logdir logs

使用 summary_writer 在文件夹中的每个时期写入日志然后 运行 以下魔法对我有用。

%load_ext tensorboard 
%tensorboard --logdir=./logs 

2.0 兼容答案:是的,您可以在 Google Colab 中使用 Tensorboard。请找到下面显示完整示例的代码。

!pip install tensorflow==2.0

import tensorflow as tf
# The function to be traced.
@tf.function
def my_func(x, y):
  # A simple hand-rolled layer.
  return tf.nn.relu(tf.matmul(x, y))

# Set up logging.
logdir = './logs/func'
writer = tf.summary.create_file_writer(logdir)

# Sample data for your function.
x = tf.random.uniform((3, 3))
y = tf.random.uniform((3, 3))

# Bracket the function call with
# tf.summary.trace_on() and tf.summary.trace_export().
tf.summary.trace_on(graph=True, profiler=True)
# Call only one tf.function when tracing.
z = my_func(x, y)
with writer.as_default():
  tf.summary.trace_export(
      name="my_func_trace",
      step=0,
      profiler_outdir=logdir)

%load_ext tensorboard
%tensorboard --logdir ./logs/func

Google Colab 的工作副本,请参考this link. For more information, please go through this link

试试这个,它对我有用

%load_ext tensorboard
import datetime
logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)

 model.fit(x=x_train, 
        y=y_train, 
        epochs=5, 
        validation_data=(x_test, y_test), 
        callbacks=[tensorboard_callback])

您可以使用 google colab 的最新升级直接连接到 google colab 中的 tensorboard。

https://medium.com/@today.rafi/tensorboard-in-google-colab-bd49fa554f9b

根据文档,您需要做的是:

%load_ext tensorboard
!rm -rf ./logs/ #to delete previous runs
%tensorboard --logdir logs/
tensorboard = TensorBoard(log_dir="./logs")

然后在 fit 方法中调用即可:

model.fit(X_train, y_train, epochs = 1000,
         callbacks=[tensorboard], validation_data=(X_test, y_test))

那应该给你这样的东西:

我用的是tensorflow==1.15.

%load_ext tensorboard
%tensorboard --logdir /content/logs

适合我。

/content/logs

是我在 google 驱动器中的日志路径。

还有另一种方法可以更好地控制。

来自 the official tutorial,您还可以使用:

from tensorboard import notebook
notebook.list() # View open TensorBoard instances. This is not required

然后在下一个单元格中:

# Control TensorBoard display. If no port is provided, 
# the most recently launched TensorBoard is used
notebook.display(port=6006, height=1000) 

截至 2022 年 5 月 22 日,在最新版本的 Colab 中。

根据我的实验,这是最佳捷径:

# Load the TensorBoard notebook extension
%load_ext tensorboard

# Directly put the log path in the logdir param
%tensorboard --logdir="vision_model/Xception/20220522-120512/"