一、安装与启动
Tensorboard是TensorFlow的一个重要组件,它可以帮助我们可视化神经网络的训练过程。首先,在安装TensorFlow时,Tensorboard也被安装了。但为了方便使用,我们通常还需要安装TensorBoard的扩展包tensorboardX。
!pip install tensorflow
!pip install tensorboardX
如果需要在Python代码中使用Tensorboard,需要在TensorFlow中引入Tensorboard的库:
import tensorflow as tf
from tensorboardX import SummaryWriter
Tensorboard提供了与命令行交互的方式开启服务,具体指令如下:
tensorboard --logdir=log_dir
其中logdir为Tensorboard日志文件路径。虽然此命令行可以开启Tensorboard服务,但更好的方式是使用Python代码进行控制,代码如下:
from tensorboard import program
tb = program.TensorBoard()
tb.configure(argv=[None, '--logdir', 'log_dir'])
tb.main()
二、可视化网络结构
Tensorboard可以将模型结构以图形化的方式呈现出来,方便我们对模型做出评估。要在Tensorboard中可视化网络结构,需要在创建模型后使用SummaryWriter对象写入tf.summary.FileWriter,具体代码如下:
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(32, input_shape=(784,), activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
writer = tf.summary.create_file_writer("log_dir/graph")
with writer.as_default():
tf.summary.trace_on(graph=True)
y_pred = model(X_train[:1])
tf.summary.trace_export(name="model_trace", step=0, profiler_outdir="log_dir")
以上代码中,我们先创建了一个包含两层全连接层的神经网络,然后创建了一个tf.summary.FileWriter对象。调用该对象的as_default()方法可以确保写入操作是在这个对象上进行的。
之后,我们通过tf.summary.trace_on()方法开启图跟踪,然后调用一次模型以追踪图。最后使用tf.summary.trace_export()方法将图信息写入日志文件。在Tensorboard的Graph选项中,我们就可以看到刚刚创建的神经网络结构。
三、可视化训练过程
在Tensorboard中,我们可以可视化训练过程,以帮助我们更好地了解模型的训练情况。具体来说,我们可以使用SummaryWriter对象的add_scalar()方法来将训练过程的损失函数值、准确率等指标写入日至文件中,然后在Tensorboard中呈现出来。
writer = SummaryWriter('log_dir/') # 日志文件存储目录
for epoch in range(20):
for i, (inputs, labels) in enumerate(train_loader):
# 计算损失函数值,并将其添加到Tensorboard中
loss = ...
writer.add_scalar('train/loss', loss, epoch*len(train_loader)+i)
writer.close()
在以上代码中,我们首先创建一个SummaryWriter对象并指定存储日志文件的存储目录。之后,我们使用add_scalar()方法将每一轮训练的损失函数值写入日志文件,然后使用writer.close()方法关闭日志文件。在Tensorboard的Scalars选项中,我们就可以看到损失函数值的变化情况。
四、可视化预测结果
如果我们的模型是用来做分类等任务的,那么我们也可以使用Tensorboard来可视化预测结果,帮助我们更好地评估模型的性能。具体来说,我们可以将模型的输入和输出写入TensorBoard,并可视化它们。以下为实现代码:
...
# 预测并将预测结果写入Tensorboard
y_pred = model(x)
for i in range(10):
writer.add_image('test/prediction/%d' % i,
tensorboardX.make_grid(x[i].unsqueeze(1).cpu().data),
global_step, dataformats='CHW')
writer.add_scalar('test/prediction_classes/%d' % i,
y_pred[i].max(dim=-1)[1], global_step)
...
在以上代码中,我们使用了SummaryWriter对象的add_image()方法将输入图像写入到TensorBoard中,使用add_scalar()方法将每个预测结果的所属类别写入到TensorBoard中。在Tensorboard的Images和Histograms选项中,我们就可以看到图像输入和输出结果。
五、结语
以上就是Tensorboard使用的主要内容。Tensorboard作为TensorFlow的重要组件之一,不仅为研究者提供了可视化分析的方法,也方便了学习者入门和理解深度学习模型。不过,值得注意的是,在使用Tensorboard时,我们需要注意日志文件存储路径的设置,以免日志文件过多占用磁盘空间。