tensorflow可视化神器,tensorboard在tf2.0中的使用

1. 神器级的TensorBoard

TensorBoard是TensorFlow中的又一神器级工具,想用户提供了模型可视化的功能。我们都知道,在构建神经网络模型时,只要模型开始训练,很多细节对外界来说都是不可见的,参数如何变化,准确率怎么样了,loss还在减小吗,这些问题都很难弄明白。但是,TensorBoard通过结合web应用为我们提供了这一功能,它将模型训练过程的细节以图表的形式通过浏览器可视化得展现在我们眼前,通过这种方式我们可以清晰感知weight、bias、accuracy的变化,把握训练的趋势。

本文介绍两种使用TensorBoard的方式。不过,无论使用那种方式,请先启动TensorBoard的web应用,这个web应用读取模型训练时的日志数据,每隔30秒更新到网页端。在TensorFlow2.0中,TensorBoard是默认安装好的,所以,可以直接根据以下命令启动

tensorboard --logdir “/home/chb/jupyter/logs”

logdir指的是日志目录,每次训练模型时,TensorBoard会在日志目录中创建一个子目录,在其中写入日志,TensorBoard的web应用正是通过日志来感知模型的训练状态,然后更新到网页端。

如果命令成功运行,可以通过本地的6006端口打开网页,但是,此时打开的页面时下面这个样子,因为还没有开始训练模型,更没有将日志写入到指定的目录。

要将训练数据写入指定目录就必须将TensorBoard嵌入模型的训练过程,TensorFlow介绍了两种方式。下面,我们通过mnist数据集训练过程来介绍着两种方式。

2.在Model.fit()中使用TensorBoard

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

# 定义日志目录,必须是启动web应用时指定目录的子目录,建议使用日期时间作为子目录名
log_dir="/home/chb/jupyter/logs/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)  # 定义TensorBoard对象

model.fit(x=x_train, 
          y=y_train, 
          epochs=5, 
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback])  # 将定义好的TensorBoard对象作为回调传给fit方法,这样就将TensorBoard嵌入了模型训练过程

这就是TensorBoard提供的功能,不可为不强大。这里,我们在介绍一下TensorBoard构造方法中的参数: 工具在Tensorflow中是非常常用的其参数解释如下

  • log_dir:保存TensorBoard要解析的日志文件的目录的路径。
  • histogram_freq:频率(在epoch中),计算模型层的激活和权重直方图。如果设置为0,则不会计算直方图。必须为直方图可视化指定验证数据(或拆分)。

3 在其他功能函数中嵌入TensorBoard

在训练过程中记录数据的利器:tf.summary()提供了各类方法(支持各种多种格式)用于保存训练过程中产生的数据(比如loss_value、accuracy、整个variable),这些数据以日志文件的形式保存到指定的文件夹中。

数据可视化:而tensorboard可以将tf.summary()记录下来的日志可视化,根据记录的数据格式,生成折线图、统计直方图、图片列表等多种图。

tf.summary()通过递增的方式更新日志,这让我们可以边训练边使用tensorboard读取日志进行可视化,从而实时监控训练过程。

3.1 tf.summary的基本步骤

# (1)创建一个 SummaryWriter 对象,生成的日志将储存到 "./mylogs" 路径中
writer_1 = tf.summary.create_file_writer("./mylogs")  #
# (2)使用 writer_1 记录with包裹的context中,进行 summary 写入的操作
with writer_1.as_default():  
    for step in range(100):    
        # other model code would go here    
        # (3)将scalar("loss", loss, step)写入 summary 
        tf.summary.scalar("loss", loss, step=step)  
        tf.summary.scalar("loss", loss, step=step)
        tf.summary.scalar("loss", loss, step=step)
        # (4)强制 SummaryWriter 将缓存中的数据写入到日志
        writer.flush()  

3.2 查看Graph和Profile信息

由于tensorflow2.0取消了sess和初始静态图,所以无法使用像1.x版本,直接将sess.graph添加进tensorboard,所以需要使用trace_on进行记录。

  • trace_export():停止trace,并将之前trace记录到的信息写入profiler日志文件。
  • trace_off():停止trace,并舍弃之前trace记录。
  • trace_on():开始trace

我们可以在训练时使用 tf.summary.trace_on 开启 Trace,此时 TensorFlow 会将训练时的大量信息(如计算图的结构,每个操作所耗费的时间等)记录下来。在训练完成后,使用 tf.summary.trace_export 将记录结果输出到文件。

writer = tf.summary.create_file_writer(log_dir)
tf.summary.trace_on(graph=True, profiler=True)  # 开启Trace,可以记录图结构和profile信息
"""
进行训练
"""
# 最后将统计信息写入日志
with writer.as_default():
    tf.summary.trace_export(name="model_trace", step=0, profiler_outdir=log_dir)    # 保存Trace信息到文件

你可能感兴趣的:(工具应用心得,tensorflow)