TensorBoard使用入门(2.x版本)

TensorBoard工具介绍

TensorBoard是TensorFlow附带一个可视化分析工具,主要用来进行性能分析和问题定位。如果神经网络非常复杂,那么TensorFlow是一款不可或缺的分析工具。
网上很多关于TensorBoard介绍是基于1.x版本的,本文是基于2.4.0版本进行介绍(TensorFlow2.x版本代码执行方式有很大不同),并提供基于Keras API配套代码。

TensorBoard工作原理

TensorBoard工作流程比较简单,分为如下步骤:

  • 在TensorFlow代码中输出log信息 :首先要在TensorFlow代码中加入log输出功能,配置好输出的路径和信息类型;
  • 在命令行中执行TensorBoard命令:TensorBoard命令是随着TensorFlow一起安装的(可在命令行中执行tensorboard --version查看是否正常安装,其版本号应该和TensorFlow相同)。TensorBoard实际是一个轻量级的定制化web server,提供http服务,其默认端口号是6006。可以在同一台计算机上运行多个TensorBoard实例,其端口号是在6006上累加。下面是一个命令样例,其中"logs"是存放log信息的目录。执行这条命令时,会显示http的端口号信息,请注意观察。
tensorboard --logdir logs
  • 通过浏览器打开TensorBoard的图形化界:可以在本机或者其他联网机器上打开浏览器;如果在本机上打开,其输入浏览器地址为:http://localhost:6006/,如果在其他机器上打开,请输入:http://[执行TensorBoard命令的机器IP地址]:6006/。(请注意:如果执行多个TensorBoard实例,其端口号就不再是6006。)

配套TensorBoard的代码编写

要想通过TensorBoard查看信息,必须要在TensorFlow代码中编写信息输出的指令。如果只需要输出默认信息,其编写的代码量很小。下面是代码编写的要点:

  • 指定输出信息的存放路径;
  • 指定输出信息的类型和内容;
  • 选择恰当流程位置点插入输出信息的语句。

更加详细的TensorBoard指导请参考TensorBoard的官网

本文作者使用的版本为:TensorFlow 2.4.0,Python 3.7.0, 操作系统macOS 10.14.6,IDE为Jupyter Notebook 6.1.6。

一个简单的操作实例

TensorFlow代码

import tensorflow as tf
import datetime, os

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 下面第一行代码是指定log信息输出路径,第二行代码是创建一个回调函数。
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_train, y_train, 
          epochs=5,
          validation_data=(x_test, y_test),
          callbacks=[tensorboard_callback])

代码说明:

  • 代码logdir = os.path.join("logs", datetime.datetime.now().strftime("%Y%m%d-%H%M%S")) 中"logs"是父目录,日期是子目录,两个目录名通过os.path.join进行拼接,该方法可以解决不同操作系统的目录分隔符不同的问题(window目录分隔符是“\”,Linux和macOS是“/”)。注意:如果自行指定目录,例如:“dir1/dir2/dir3”,请使用:logdir = os.path.join("dir1", "dir2", "dir2"),不要使用 logdir = "dir1/dir2/dir3",因为该代码在Windows操作系统中会出问题。
  • model.fit语句增加了一个参数callbacks=[tensorboard_callback] ,该参数指定了模型训练时的回调函数。
  • 总结:该段代码在原来正常流程基础上,增加了两行代码,同时模型训练函数model.fit增加了一个参数。

TensorBoard操作

上面代码运行成功后,进行如下操作:

  • 打开命令行终端(任意终端都可以),进入“logs”的上级目录,输入下面命令:
$tensorboard --logdir logs
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.4.0 at http://localhost:6006/ (Press CTRL+C to quit)
  • 注意:执行tensorboard命令时,一定要注意当前路径位置。在上例中,"logs"路径是针对当前路径而言的,如果在当前路径中没有“logs”子目录,tensorboard不会报错,但是打开浏览器将无法查询到信息。
  • 打开Chrome或者Firefox浏览器(其他浏览器Google不保证其正确性),在浏览器地址输入:http://localhost:6006,即可以看到TensorBoard的图形化界面。详细操作这里不再赘述。
  • 如果tensorboard是运行在远程服务器上,或者想在其他机器上观察TensorBoard数据,只需要把localhost修改为tensorboard运行机器的IP地址即可。
  • 可以运行多个tensorboard实例,注意其对应的端口号会变化的。

一个稍微复杂的实例

下面是一个稍微复杂的实例。

TensorFlow代码

import tensorflow as tf
import datetime, os

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

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)

logdir_1 = logdir + 'test'
file_writer = tf.summary.create_file_writer(logdir_1)

class myCallback(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs=None):
        my_text = str(model.layers[3].bias.numpy())
        with file_writer.as_default():
          tf.summary.text(f"Epoch {epoch} end :", my_text, step=0)

model.fit(x_train, y_train, 
          epochs=5,
          validation_data=(x_test, y_test),
          callbacks=[tensorboard_callback, myCallback()])

代码说明:

  • 这里增加一个输出目录,增加一个回调函数。
  • 增加的回调函数其作用是:在每次epoch结束时,输出layer 3(也就是tf.keras.layers.Dense(10, activation='softmax')这一层)的bias参数值。

TensorBoard操作

和之前例子操作不同之处是,在TensorBoard界面中,打开上面的“Text”标签,可以看到输出的信息。
TensorBoard的界面示例

注意事项说明

Jupyter环境下的操作

Jupyter环境支持内置TensorBoard显示,具体操作如下:

  • 在运行代码之前增加一行语句:
    %load_ext tensorboard
  • 在模型的正常代码运行后,增加一行命令:
    %tensorboard --logdir path/to/logs
  • 说明:在Jupyter环境下显示TensorBoard界面比较受限(界面大小,操作灵活性),建议首选在浏览器是打开。

其他说明

  • 关于TensorBoard更多操作和细节请浏览官网地址
  • TensorBoard官网文档质量不是很高,明显是多人共同写作而成,其代码风格不同,代码示例的TensorFlow版本也未必是最新版本的,甚至有一些明显编辑错误。阅读时注意自我分辨。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值