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

什么是 TensorBoard?

张量板 是用于可视化图形和其他工具的界面,用于理解、调试和优化模型。它是一种为机器学习工作流程提供测量和可视化的工具。它有助于跟踪损失和准确性、模型图可视化、低维空间中的项目嵌入等指标。

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

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

TensorFlow Graph 可视化
TensorFlow Graph 可视化

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

TensorBoard 图表

TensorBoard 图表
  • 标量:模型训练过程中展示不同的有用信息
  • :显示模型
  • 直方图:用直方图显示权重
  • 配电系统:显示权重的分布
  • 投影机:显示主成分分析和 T-SNE 算法。用于降维的技术

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

如果你看一下图表,你就能了解模型是如何工作的。

  1. 将数据入队到模型:将与批次大小相等的数据量推送到模型,即每次迭代后的数据馈送数量
  2. 将数据提供给张量
  3. 训练模型
  4. 显示训练过程中的批次数。将模型保存在磁盘上。

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

Tensorboard 背后的基本思想是,神经网络可以称为黑匣子,我们需要一个工具来检查这个黑匣子里面的东西。你可以将 Tensorboard 想象成一个手电筒,开始深入研究神经网络。

它有助于理解操作之间的依赖关系、权重的计算方式、显示损失函数和许多其他有用信息。当你将所有这些信息整合在一起时,你就有了一个很棒的工具来调试和找到如何改进模型的方法。

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

TensorBoard 图表
TensorBoard 图

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

TensorBoard 是一款出色的工具,可用于可视化此类指标并突出显示潜在问题。神经网络可能需要数小时甚至数周的时间才能找到解决方案。TensorBoard 会非常频繁地更新指标。在这种情况下,您无需等到最后才查看模型是否正确训练。您可以打开 TensorBoard 检查训练进展情况,并在必要时进行适当的更改。

如何使用 TensorBoard?

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

代码将在未来的教程中解释,这里的重点是 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 估算器。这是包含所有数学计算的 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 用户

针对 MacOS 用户的 TensorBoard 教程

对于 Windows 用户

TensorBoard 教程 Windows 用户

您可以在PyTorch TensorBoard。

现在您已经写入了日志事件,您可以打开 Tensorboard。Tensorboard Keras 在端口 6006 上运行(Jupyter 在端口 8888 上运行)。对于 MacOs 用户,您可以使用终端,对于 Anaconda 提示符, Windows 用户。

对于 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:http://localhost:6006

它也可能位于以下位置。

使用 TensorBoard

将 URL 复制并粘贴到您喜欢的浏览器中。您应该看到以下内容:

请注意,我们将在专门介绍 深入学习.

使用 TensorBoard

如果你看到类似这样的内容:

使用 TensorBoard

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

如果要关闭 TensorBoard,请按 CTRL+C

提示:检查你的 anaconda 提示符,了解当前的工作目录,

使用 TensorBoard

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

总结

TensorBoard 是一款出色的模型可视化工具。此外,训练期间还会显示许多指标,例如损失、准确率或权重。

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

cd /Users/Guru99/tuto_TF

激活 Tensorflow 的环境

activate hello-tf

启动 Tensorboard

tensorboard --logdir=.+ PATH