TensorBoard 教程:TensorFlow 图可视化 [示例]

什么是 TensorBoard?

TensorBoard 是用于可视化图和其他工具以理解、调试和优化模型的界面。它是一种为机器学习工作流提供度量和可视化的工具。它有助于跟踪诸如损失和准确率、模型图可视化、在低维空间中投影嵌入等指标。

使用 Tensorboard 进行 TensorFlow 图可视化示例

下面的图像来自您将在本 TensorBoard 教程中生成的 TensorBoard 图。这是主面板

TensorFlow Graph Visualization
TensorFlow 图可视化

从下图中,您可以看到 TensorBoard 图可视化的面板。该面板包含不同的选项卡,这些选项卡链接到您运行模型时添加的信息级别。

TensorBoard Graphs

TensorBoard 图
  • 标量:在模型训练期间显示各种有用信息
  • :显示模型
  • 直方图:用直方图显示权重
  • 分布:显示权重的分布
  • 投影器:显示主成分分析和 T-SNE 算法。用于降维的技术

在本 TensorBoard 教程中,您将训练一个简单的深度学习模型。您将在未来的教程中学习它的工作原理。

如果您查看图表,您就可以了解模型的工作原理。

  1. 将数据加载到模型:将等于批次大小的数据量推送到模型,即每次迭代后输入的数据数量
  2. 将数据馈入张量
  3. 训练模型
  4. 显示训练期间的批次数量。将模型保存在磁盘上。

TensorFlow Graph Visualization using Tensorboard Example

TensorBoard 的基本思想是,神经网络可能是一个“黑匣子”,我们需要一个工具来检查这个盒子里面有什么。您可以将 TensorBoard 想象成一个手电筒,用来深入了解神经网络。

它有助于理解操作之间的依赖关系、权重的计算方式、显示损失函数以及许多其他有用的信息。当您将所有这些信息汇总在一起时,您就拥有了一个强大的工具来调试并找到改进模型的方法。

为了让您了解 TensorBoard 图有多么有用,请看下图

TensorBoard Graphs
TensorBoard 图

神经网络决定如何连接不同的“神经元”以及在模型可以预测结果之前需要多少层。一旦定义了架构,您不仅需要训练模型,还需要一个度量来计算预测的准确性。此度量称为损失函数。目标是最小化损失函数。换句话说,这意味着模型产生的错误更少。所有机器学习算法都会重复计算许多次,直到损失达到一条平坦的线。要最小化此损失函数,您需要定义一个学习率。这是您希望模型学习的速度。如果将学习率设置得太高,模型将没有时间学习任何东西。左图就是这种情况。线条上下移动,这意味着模型仅凭猜测来预测结果。右边的图显示损失随着迭代次数的减少而减少,直到曲线变平,这意味着模型找到了一个解决方案。

TensorBoard 是可视化这些度量并突出潜在问题的绝佳工具。神经网络可能需要数小时甚至数周才能找到解决方案。TensorBoard 非常频繁地更新度量。在这种情况下,您无需等到最后就知道模型是否训练正确。您可以打开 TensorBoard 来检查训练进度,并在必要时进行适当的更改。

如何使用 TensorBoard?

在本教程中,您将学习如何从终端为 MacOS 打开 TensorBoard 以及为 Windows 打开命令行的 TensorBoard。

代码将在未来的教程中进行解释,这里重点关注 TensorBoard。

首先,您需要导入训练期间将使用的库

## Import the library
import tensorflow as tf
import numpy as np

您创建数据。这是一个包含 10000 行和 5 列的数组

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

输出

(10000, 5)

下面的代码将转换数据并创建模型。

请注意,学习率等于 0.1。如果您将此速率更改为更高的值,模型将找不到解决方案。这正是上图左侧发生的情况。

在大多数TensorFlow 教程中,您将使用 TensorFlow estimator。这是包含所有数学计算的 TensorFlow API。

要创建日志文件,您需要指定路径。这通过 model_dir 参数完成。

在下面的 TensorBoard 示例中,您将模型存储在工作目录中,即存储笔记本或 Python 文件的位置。在此路径下,TensorFlow 将创建一个名为 train 的文件夹,其中包含一个名为 linreg 的子文件夹。

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

输出

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

此 TensorFlow 可视化图示例的最后一步是训练模型。在训练过程中,TensorFlow 会在模型目录中写入信息。

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

输出

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

对于MacOS用户

TensorBoard Tutorial For MacOS User

对于Windows用户

TensorBoard Tutorial For Windows User

您可以在PyTorch TensorBoard 中看到此信息。

现在您已经有了写入的日志事件,就可以打开 Tensorboard 了。Tensorboard Keras 运行在端口 6006 上(Jupyter 运行在端口 8888 上)。您可以使用 MacOs 用户的终端或 Windows 用户的 Anaconda prompt。

对于MacOS用户

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

笔记本存储在路径 /Users/Guru99/tuto_TF 中

对于 Windows 用户

cd C:\Users\Admin\Anaconda3
activate hello-tf

笔记本存储在路径 C:\Users\Admin\Anaconda3 中

要启动 Tensorboard,您可以使用此代码

对于MacOS用户

tensorboard --logdir=./train/linreg

对于 Windows 用户

tensorboard --logdir=.\train\linreg

Tensorboard 位于此 URL:https://:6006

它也可能位于以下位置。

Use TensorBoard

将 URL 复制并粘贴到您喜欢的浏览器中。您应该会看到这个

请注意,我们将在专门介绍深度学习的教程中学习如何读取图表。

Use TensorBoard

如果您看到类似这样的内容

Use TensorBoard

这表示 Tensorboard 找不到日志文件。请确保您已将 cd 指向正确的路径,或仔细检查日志事件是否已创建。如果没有,请重新运行代码。

如果您想关闭 TensorBoard,请按 CTRL+C

友情提示:检查您的 anaconda prompt 中的当前工作目录,

Use TensorBoard

日志文件应在 C:\Users\Admin 创建

摘要

TensorBoard 是可视化模型的绝佳工具。此外,在训练过程中会显示许多指标,例如损失、准确率或权重。

要激活 Tensorboard,您需要设置文件的路径

cd /Users/Guru99/tuto_TF

激活 Tensorflow 的环境

activate hello-tf

启动 Tensorboard

tensorboard --logdir=.+ PATH