编程技术网

关注微信公众号,定时推送前沿、专业、深度的编程技术资料。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

极客时间

使用 TensorBoard 进行可视化

mycode 深度学习 2021-11-29 15:51 469人围观

腾讯云服务器

使用 TensorBoard 进行可视化

张量板是一个很棒的交互式可视化工具,您可以使用它来查看训练期间的学习曲线、比较多次运行之间的学习曲线、可视化计算图、分析训练统计数据、查看模型生成的图像、可视化投影到 3D 的复杂多维数据和自动为您聚类,等等!这个工具会在你安装 TensorFlow 时自动安装,所以你已经拥有了。

要使用它,您必须修改您的程序,以便它将您想要可视化的数据输出到称为事件文件的特殊二进制日志文件每个二进制数据记录称为摘要TensorBoard 服务器将监控日志目录,它会自动获取更改并更新可视化:这允许您可视化实时数据(有很短的延迟),例如训练期间的学习曲线。通常,您希望将 TensorBoard 服务器指向根日志目录并配置您的程序,以便它每次运行时写入不同的子目录。这样,同一个 TensorBoard 服务器实例将允许您可视化和比较来自程序多次运行的数据,而不会混淆所有内容。

让我们首先定义我们将用于 TensorBoard 日志的根日志目录,加上一个小函数,它将根据当前日期和时间生成一个子目录路径,以便在每次运行时都不同。您可能希望在日志目录名称中包含额外信息,例如您正在测试的超参数值,以便更轻松地了解您在 TensorBoard 中查看的内容:

import os
root_logdir = os.path.join(os.curdir, "my_logs")

def get_run_logdir():
    import time
    run_id = time.strftime("run_%Y_%m_%d-%H_%M_%S")
    return os.path.join(root_logdir, run_id)

run_logdir = get_run_logdir() # e.g., './my_logs/run_2019_06_07-15_15_22'

好消息是 Keras 提供了一个很好的TensorBoard()回调:

[...] # Build and compile your model
tensorboard_cb = keras.callbacks.TensorBoard(run_logdir)
history = model.fit(X_train, y_train, epochs=30,
                    validation_data=(X_valid, y_valid),
                    callbacks=[tensorboard_cb])

这就是全部!使用起来再简单不过了。如果您运行此代码,TensorBoard()回调将负责为您创建日志目录(如果需要,还会创建其父目录),并且在训练期间它将创建事件文件并将摘要写入其中。第二次运行程序后(也许改变了一些超参数值),你最终会得到一个类似于这个的目录结构:

my_logs/
├── run_2019_06_07-15_15_22
│   ├── train
│   │   ├── events.out.tfevents.1559891732.mycomputer.local.38511.694049.v2
│   │   ├── events.out.tfevents.1559891732.mycomputer.local.profile-empty
│   │   └── plugins/profile/2019-06-07_15-15-32
│   │       └── local.trace
│   └── validation
│       └── events.out.tfevents.1559891733.mycomputer.local.38511.696430.v2
└── run_2019_06_07-15_15_49
    └── [...]

每次运行有一个目录,每个目录包含一个用于训练日志的子目录和一个用于验证日志的子目录。两者都包含事件文件,但训练日志还包含分析跟踪:这允许 TensorBoard 向您显示模型在模型的每个部分上花费的时间,在您的所有设备上,这对于定位性能瓶颈非常有用。

接下来你需要启动 TensorBoard 服务器。一种方法是在终端中运行命令。如果你在 virtualenv 中安装了 TensorFlow,你应该激活它。接下来,在项目的根目录(或从其他任何地方,只要您指向适当的日志目录)运行以下命令:

$ tensorboard --logdir=./my_logs --port=6006
TensorBoard 2.0.0 at http://mycomputer.local:6006/ (Press CTRL+C to quit)

如果您的 shell 找不到tensorboard脚本,那么您必须更新您的PATH环境变量,使其包含安装脚本的目录(或者,您可以tensorboard在命令行中用替换)。服务器启动后,您可以打开 Web 浏览器并转到http://localhost:6006python3 -m tensorboard.main

或者,您可以通过运行以下命令直接在 Jupyter 中使用 TensorBoard。第一行加载 TensorBoard 扩展,第二行在端口 6006 上启动一个 TensorBoard 服务器(除非它已经启动)并连接到它:

%load_ext tensorboard
%tensorboard --logdir=./my_logs --port=6006

无论哪种方式,您都应该看到 TensorBoard 的 Web 界面。单击 SCALARS 选项卡以查看学习曲线(见图 10-17)。在左下角,选择要可视化的日志(例如,第一次和第二次运行的训练日志),然后单击epoch_loss标量。请注意,两次运行的训练损失都很好地下降,但第二次运行下降得更快。实际上,我们使用了 0.05 ( optimizer=keras.optimizers.SGD(lr=0.05)) 而不是 0.001的学习率

mls2 1017
图 10-17。使用 TensorBoard 可视化学习曲线

您还可以可视化整个图形、学习的权重(投影到 3D)或分析轨迹。TensorBoard()回调有自己的选择太记录额外的数据,比如嵌入物(见第13章)。

此外,TensorFlowtf.summary包中提供了一个较低级别的 API 下面的代码创建了一个SummaryWriterusingcreate_file_writer()函数,它使用这个 writer 作为上下文来记录标量、直方图、图像、音频和文本,然后所有这些都可以使用 TensorBoard 进行可视化(试一试!):

test_logdir = get_run_logdir()
writer = tf.summary.create_file_writer(test_logdir)
with writer.as_default():
    for step in range(1, 1000 + 1):
        tf.summary.scalar("my_scalar", np.sin(step / 10), step=step)
        data = (np.random.randn(100) + 2) * step / 100 # some random data
        tf.summary.histogram("my_hist", data, buckets=50, step=step)
        images = np.random.rand(2, 32, 32, 3) # random 32×32 RGB images
        tf.summary.image("my_images", images * step / 1000, step=step)
        texts = ["The step is " + str(step), "Its square is " + str(step**2)]
        tf.summary.text("my_text", texts, step=step)
        sine_wave = tf.math.sin(tf.range(12000) / 48000 * 2 * np.pi * step)
        audio = tf.reshape(tf.cast(sine_wave, tf.float32), [1, -1, 1])
        tf.summary.audio("my_audio", audio, sample_rate=48000, step=step)

这实际上是一个有用的可视化工具,甚至超越了 TensorFlow 或深度学习。

让我们总结一下到目前为止您在本章中学到的内容:我们看到了神经网络的来源、MLP 是什么以及如何使用它进行分类和回归、如何使用 tf.keras 的 Sequential API 来构建 MLP,以及如何使用使用 Functional API 或 Subclassing API 来构建更复杂的模型架构。您学习了如何保存和恢复模型,以及如何使用回调进行检查点、提前停止等。最后,您学习了如何使用 TensorBoard 进行可视化。您已经可以继续使用神经网络来解决许多问题了!但是,您可能想知道如何选择隐藏层的数量、网络中的神经元数量以及所有其他超参数。现在让我们看看这个。

转自:网络
腾讯云服务器 阿里云服务器


关注微信
^