我可以将 TensorBoard 与 Google Colab 一起使用吗?
Posted
技术标签:
【中文标题】我可以将 TensorBoard 与 Google Colab 一起使用吗?【英文标题】:Can I use TensorBoard with Google Colab? 【发布时间】:2018-05-28 20:46:40 【问题描述】:在 Google Colab 上训练 TensorFlow 模型时,有什么方法可以使用 TensorBoard?
【问题讨论】:
官方文档:colab.research.google.com/github/tensorflow/tensorboard/blob/… 【参考方案1】:编辑:您可能想试一试官方%tensorboard
magic,从 TensorFlow 1.13 开始提供。
在%tensorboard
魔法存在之前,标准的方法是
实现此目的是使用代理网络流量到 Colab VM
ngrok。可以在 here 找到 Colab 示例。
这些是步骤(代码 sn-ps 表示 colab 中“代码”类型的单元格):
让 TensorBoard 在后台运行。 灵感来自this answer。
LOG_DIR = '/tmp/log'
get_ipython().system_raw(
'tensorboard --logdir --host 0.0.0.0 --port 6006 &'
.format(LOG_DIR)
)
下载并解压ngrok。 将传递给wget
的链接替换为适合您操作系统的正确下载链接。
! wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
! unzip ngrok-stable-linux-amd64.zip
启动 ngrok 后台进程...
get_ipython().system_raw('./ngrok http 6006 &')
...并检索公共 url。 Source
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
【讨论】:
我正在尝试在我的 colabVM 中运行 tensorbaord,并且还需要将事件和检查点存储在我的谷歌驱动器中?您的解决方案在这方面有帮助吗?此外,如果您能详细说明您在 colab 中编写的方法如何实现这一目标,那将非常有帮助。是否使用此方法将 colabVM 中的事件带到本地桌面? @anu 这些用例的示例笔记本:Drive IO、system aliases。【参考方案2】:这里的许多答案现在已经过时了。我敢肯定几周后会是我的。但在撰写本文时,我所要做的就是从 colab 运行这些代码行。并且张量板打开得很好。
%load_ext tensorboard
%tensorboard --logdir logs
【讨论】:
您好,感谢您的评论。您是否在 colab notebook 中运行了这两行代码?我做到了,我在笔记本中看到了一个 TensorBoard 窗口,上面写着“当前数据集没有活动的仪表板”。信息。你能帮帮我吗? 注意:在 Firefox 上对我无效,但在 Chrome 上有效。直接在单元格中打开 Tensorboard。 不要使用%tensorboard --logdir logs
,而应使用%tensorboard --logdir=logs
,这将解决“当前数据集没有活动仪表板”的问题,并且@987654324之间不应有空格@ 和 `./path/to/your/directory' 否则 tensorboard 将无法正确显示。【参考方案3】:
这是在 Google Colab 上执行相同 ngrok 隧道方法的更简单方法。
!pip install tensorboardcolab
那么,
from tensorboardcolab import TensorBoardColab, TensorBoardColabCallback
tbc=TensorBoardColab()
假设您使用的是 Keras:
model.fit(......,callbacks=[TensorBoardColabCallback(tbc)])
您可以阅读原帖here。
【讨论】:
嗨,这看起来很酷,但我在 Colab 中遇到了这个错误:FailedPreconditionError: Error while reading resource variable conv_dw_8/depthwise_kernel from Container: localhost. This could mean that the variable was uninitialized.
@Austin tensorboardcolab 的作者找到了解决方法:“我发现它偶尔会发生,可以通过以下方式解决:1.Waiting 2.Restart Colab server 3.Change Colab server types (CPU / GPU / TPU),然后将其改回“。见他的评论here
另外,请确保您的模型是直接由我们的 Keras 构建的,而不是嵌入 tensorflow。例如,用model.add(keras.layers.LSTM(...))
代替model.add(tf.keras.layers.LSTM(....))
。否则可能会有错误消息。【参考方案4】:
使用 tensorboardcolab 在 Google Colab 上运行的用于 TensorFlow 的 TensorBoard。这在内部使用 ngrok 进行隧道传输。
-
安装 TensorBoardColab
!pip install tensorboardcolab
-
创建一个 tensorboardcolab 对象
tbc = TensorBoardColab()
这会自动创建一个可以使用的 TensorBoard 链接。这个 Tensorboard 正在读取 './Graph' 处的数据
-
创建一个指向该位置的 FileWriter
summary_writer = tbc.get_writer()
tensorboardcolab 库有返回指向 './Graph' 位置上方的 FileWriter 对象的方法。
-
开始使用 summary_writer 对象将摘要信息添加到“./Graph”位置的事件文件中
您可以添加标量信息或图形或直方图数据。
参考:https://github.com/taomanwai/tensorboardcolab
【讨论】:
【参考方案5】:我试过但没有得到结果,但是当如下使用时,得到了结果
import tensorboardcolab as tb
tbc = tb.TensorBoardColab()
在此之后打开输出中的链接。
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'
【讨论】:
【参考方案6】:以下是在 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('"', '"'))
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)
之类的方式将整个日志导出到您的云端硬盘,以便您可以下载并在本地查看。
【讨论】:
【参考方案7】:我使用 google drive 的备份和同步 https://www.google.com/drive/download/backup-and-sync/。培训期间临时保存在我的谷歌驱动器中的事件文件会自动同步到我自己计算机上的文件夹中。我们称这个文件夹为logs
。要访问 tensorboard 中的可视化,我打开命令提示符,导航到同步的 google drive 文件夹,然后输入:tensorboard --logdir=logs
。
因此,通过自动将我的驱动器与我的计算机同步(使用备份和同步),我可以像在自己的计算机上训练一样使用 tensorboard。
编辑: 这是一个可能有用的笔记本。 https://colab.research.google.com/gist/MartijnCa/961c5f4c774930f4bdd32d51829da6f6/tensorboard-with-google-drive-backup-and-sync.ipynb
【讨论】:
能否请您在可共享的 colab 中写下您的方法并在您的帖子中分享。这将非常有帮助和快速! 按照您的建议,我只能通过 colab 访问“我的云端硬盘”中的文件,但不能访问我的同步计算机所在的“计算机”中的文件。而且您的笔记本也不会登录到您同步的计算机,而是登录到“我的驱动器”文件夹 - 请参阅os.chdir('/content/drive/My Drive')
行。您能否进一步解释一下您是如何访问已同步的计算机的?
@NeStack 你说得对,我的解决方案只使用“我的驱动器”文件夹。对不起,我不使用“计算机”。您可以使用备份和同步程序将“我的驱动器”文件夹同步到您自己的计算机。这样您就可以在自己计算机上的文件资源管理器中访问事件文件。
@MartijnCazemier 好的,这是有道理的。这也是一个对我有用的选择
@MartijnCazemier 它不允许我,因为我的驱动器有空间,也不允许逃脱它。【参考方案8】:
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。欲了解更多信息,请通过this link。
【讨论】:
【参考方案9】:TensorBoard 可与 Google Colab 和 TensorFlow 2.0 配合使用
!pip install tensorflow==2.0.0-alpha0
%load_ext tensorboard.notebook
【讨论】:
【参考方案10】:我今天尝试在 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
【讨论】:
【参考方案11】:是的,在 google colab 中使用 tensorboard 非常简单。请按照以下步骤操作-
1) 加载张量板扩展
%load_ext tensorboard.notebook
2) 将其添加到 keras 回调中
tensorboard_callback = tf.keras.callbacks.TensorBoard(logdir, histogram_freq=1)
3) 启动张量板
%tensorboard — logdir logs
希望对你有帮助。
【讨论】:
【参考方案12】:使用 summary_writer 在文件夹中的每个时期写入日志,然后运行以下魔法对我有用。
%load_ext tensorboard
%tensorboard --logdir=./logs
【讨论】:
【参考方案13】:有一个替代解决方案,但我们必须使用 TFv2.0 预览版。因此,如果您对迁移没有问题,请尝试以下操作:
为 GPU 或 CPU 安装 tfv2.0(TPU 尚不可用)
CPU tf-nightly-2.0-preview 显卡 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 官方 colab 笔记本和 github 上的repo
新的 TFv2.0 alpha 版本:
CPU!pip install -q tensorflow==2.0.0-alpha0
显卡!pip install -q tensorflow-gpu==2.0.0-alpha0
【讨论】:
【参考方案14】:您可以使用 google colab 的最新升级直接连接到 google colab 中的 tensorboard。
https://medium.com/@today.rafi/tensorboard-in-google-colab-bd49fa554f9b
【讨论】:
【参考方案15】:根据文档,您需要做的就是:
%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))
这应该给你这样的东西:
【讨论】:
【参考方案16】:加入@solver149 回答,这里有一个简单的例子,如何在google colab 中使用TensorBoard
1.创建图表,例如:
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。使用它:)
首先从 tensoroaedcolab 导入 TensorBoard(您可以使用 import*
一次导入所有内容),然后创建您的 tensorBoardcolab,然后像这样附加一个作家:
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.检查给定的链接:D
这个例子是来自 TF 指南的令牌:TensorBoard。
【讨论】:
唯一在 Colab 上完美地为我工作的解决方案。谢谢@Dina Taklit! 我收到一个错误,AttributeError: module 'tensorflow_core.summary' has no attribute 'FileWriter'
@sarannns 我希望这会有所帮助***.com/questions/43304270/…【参考方案17】:
我正在使用 tensorflow==1.15。
%load_ext tensorboard
%tensorboard --logdir /content/logs
为我工作。
/content/logs
是我在谷歌驱动器中的日志路径。
【讨论】:
【参考方案18】:到目前为止我发现的简单和最简单的方法:
使用 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,请公开端口并单击链接。 我假设您有适当的附加值可以在摘要中可视化,然后合并所有摘要。
import os
os.system("tensorboard --logdir=./logs --host 0.0.0.0 --port 6006 &")
setup_google_colab.expose_port_on_colab(6006)
运行上述语句后,您将提示如下链接:
Open https://a1b2c34d5.ngrok.io to access your 6006 port
请参阅以下 git 以获得更多帮助:
https://github.com/MUmarAmanat/MLWithTensorflow/blob/master/colab_tensorboard.ipynb
【讨论】:
看看其他答案,上面的选项看起来更好,因为它们不需要手动步骤。 @lucid_dreamer,毫无疑问,上面的答案有更好的解释,步骤也很简单,但是如果我们知道其他答案确实让其他人知道所有技术,可能是一些对某些人有帮助的技术。这完全取决于您的选择。 我收到AttributeError: module 'setup_google_colab' has no attribute 'expose_port_on_colab'
@Biranchi expose_port_on_colab is function is in setup_google_colab.py,你可以访问这个链接参考github.com/hse-aml/intro-to-dl/blob/master/…【参考方案19】:
还有另一种方法可以进行更多控制。
来自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)
【讨论】:
【参考方案20】:试试这个,它对我有用
%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])
【讨论】:
以上是关于我可以将 TensorBoard 与 Google Colab 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
tensorboard中运行次数与google cloud机器学习job配置的关系
将 Google 的 Tensorboard 连接到 Vertex AI AutoML
使用 Firefox 的 Tensorboard 在 Google Colab 中出现错误 403
如何在 Colaboratory 中使用 Tensorboard