TensorFlow 2.0 常用模块2:TensorBoard

TensorBoard:训练过程可视化

有时,你希望查看模型训练过程中各个参数的变化情况(例如损失函数 loss 的值)。虽然可以通过命令行输出来查看,但有时显得不够直观。而 TensorBoard 就是一个能够帮助我们将训练过程可视化的工具。

首先在代码目录下建立一个文件夹(如 ./tensorboard )存放 TensorBoard 的记录文件,并在代码中实例化一个记录器:

1summary_writer = tf.summary.create_file_writer('./tensorboard')     # 参数为记录文件所保存的目录

接下来,当需要记录训练过程中的参数时,通过 with 语句指定希望使用的记录器,并对需要记录的参数(一般是 scalar)运行 tf.summary.scalar(name, tensor, step=batch_index) ,即可将训练过程中参数在 step 时候的值记录下来。这里的 step 参数可根据自己的需要自行制定,一般可设置为当前训练过程中的 batch 序号。整体框架如下:

1summary_writer = tf.summary.create_file_writer('./tensorboard')
2# 开始模型训练
3for batch_index in range(num_batches):
4    # ...(训练代码,当前batch的损失值放入变量loss中)
5    with summary_writer.as_default():                               # 希望使用的记录器
6        tf.summary.scalar("loss", loss, step=batch_index)
7        tf.summary.scalar("MyScalar", my_scalar, step=batch_index)  # 还可以添加其他自定义的变量

每运行一次 tf.summary.scalar() ,记录器就会向记录文件中写入一条记录。除了最简单的标量(scalar)以外,TensorBoard 还可以对其他类型的数据(如图像,音频等)进行可视化,详见 TensorBoard 文档 。

当我们要对训练过程可视化时,在代码目录打开终端(如需要的话进入 TensorFlow 的 conda 环境),运行:

1tensorboard --logdir=./tensorboard
然后使用浏览器访问命令行程序所输出的网址(一般是 http:// 计算机名称:6006),即可访问 TensorBoard 的可视界面,如下图所示:

默认情况下,TensorBoard 每 30 秒更新一次数据。不过也可以点击右上角的刷新按钮手动刷新。

TensorBoard 的使用有以下注意事项:

如果需要重新训练,需要删除掉记录文件夹内的信息并重启 TensorBoard(或者建立一个新的记录文件夹并开启 TensorBoard, --logdir 参数设置为新建立的文件夹);

记录文件夹目录保持全英文。
最后提供一个实例,以前章的 多层感知机模型 为例展示 TensorBoard 的使用:

1import tensorflow as tf
2from zh.model.mnist.mlp import MLP
3from zh.model.utils import MNISTLoader
4
5num_batches = 10000
6batch_size = 50
7learning_rate = 0.001
8model = MLP()
9data_loader = MNISTLoader()
10optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)
11summary_writer = tf.summary.create_file_writer('./tensorboard')     # 实例化记录器
12for batch_index in range(num_batches):
13    X, y = data_loader.get_batch(batch_size)
14    with tf.GradientTape() as tape:
15        y_pred = model(X)
16        loss = tf.keras.losses.sparse_categorical_crossentropy(y_true=y, y_pred=y_pred)
17        loss = tf.reduce_mean(loss)
18        print("batch %d: loss %f" % (batch_index, loss.numpy()))
19        with summary_writer.as_default():                           # 指定记录器
20            tf.summary.scalar("loss", loss, step=batch_index)       # 将当前损失函数的值写入记录器
21    grads = tape.gradient(loss, model.variables)
22    optimizer.apply_gradients(grads_and_vars=zip(grads, model.variables))
  • 本代码示例调用了先前连载文章中已实现的模块MLP(多层感知机)和MNISTLoader(MNIST数据集加载模块),请访问 https://github.com/snowkylin/tensorflow-handbook/tree/master/source/_static/code 以获取源代码。

如果帮到了,希望你们能收藏评论加点赞,一键三连走一波,感谢支持。

原文来自微信公众号,侵删。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值