TensorBoard 教程:TensorFlow 图可视化 [示例]
什么是 TensorBoard?
TensorBoard 是用于可视化图和其他工具以理解、调试和优化模型的界面。它是一种为机器学习工作流提供度量和可视化的工具。它有助于跟踪诸如损失和准确率、模型图可视化、在低维空间中投影嵌入等指标。
使用 Tensorboard 进行 TensorFlow 图可视化示例
下面的图像来自您将在本 TensorBoard 教程中生成的 TensorBoard 图。这是主面板

从下图中,您可以看到 TensorBoard 图可视化的面板。该面板包含不同的选项卡,这些选项卡链接到您运行模型时添加的信息级别。
- 标量:在模型训练期间显示各种有用信息
- 图:显示模型
- 直方图:用直方图显示权重
- 分布:显示权重的分布
- 投影器:显示主成分分析和 T-SNE 算法。用于降维的技术
在本 TensorBoard 教程中,您将训练一个简单的深度学习模型。您将在未来的教程中学习它的工作原理。
如果您查看图表,您就可以了解模型的工作原理。
- 将数据加载到模型:将等于批次大小的数据量推送到模型,即每次迭代后输入的数据数量
- 将数据馈入张量
- 训练模型
- 显示训练期间的批次数量。将模型保存在磁盘上。
TensorBoard 的基本思想是,神经网络可能是一个“黑匣子”,我们需要一个工具来检查这个盒子里面有什么。您可以将 TensorBoard 想象成一个手电筒,用来深入了解神经网络。
它有助于理解操作之间的依赖关系、权重的计算方式、显示损失函数以及许多其他有用的信息。当您将所有这些信息汇总在一起时,您就拥有了一个强大的工具来调试并找到改进模型的方法。
为了让您了解 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用户
对于Windows用户
您可以在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
它也可能位于以下位置。
将 URL 复制并粘贴到您喜欢的浏览器中。您应该会看到这个
请注意,我们将在专门介绍深度学习的教程中学习如何读取图表。
如果您看到类似这样的内容
这表示 Tensorboard 找不到日志文件。请确保您已将 cd 指向正确的路径,或仔细检查日志事件是否已创建。如果没有,请重新运行代码。
如果您想关闭 TensorBoard,请按 CTRL+C
友情提示:检查您的 anaconda prompt 中的当前工作目录,
日志文件应在 C:\Users\Admin 创建
摘要
TensorBoard 是可视化模型的绝佳工具。此外,在训练过程中会显示许多指标,例如损失、准确率或权重。
要激活 Tensorboard,您需要设置文件的路径
cd /Users/Guru99/tuto_TF
激活 Tensorflow 的环境
activate hello-tf
启动 Tensorboard
tensorboard --logdir=.+ PATH