tf.summary的完全解读

TensorFlow提供了很多机制来对模型进行可视化,其中一个强大的机制是tf.summary。tf.summary提供了一系列的函数,可以记录summary信息,以便于在TensorBoard中进行展示和调试。在这篇文章中,我们将从多个方面对tf.summary进行详细的阐述。

一、tf.summary内存

tf.summary记录的信息在内存中存储,即在模型训练过程中会不断的产生summary信息,这些信息会被累积在内存中,分散输出并不容易管理。可以通过下面两种方式来避免内存过多:1.使用tf.summary.FileWriter,在定义的时候设置max_queue和flush_secs参数,可以让数据定期的写入磁盘,释放内存;2.使用tf.summary.create_no_op操作,来创建一个空的操作,避免数据占据过多内存。

二、tf.summary.merge_all()

tf.summary.merge_all()是一个核心函数,它可以将所有采集的事件合并成一个tensor,这样可以同时运行多个采集操作。tf.summary.merge_all()合并的过程是针对所有可采集的事件,而tf.summary.merge函数是针对单独一个事件进行合并。例如:

summary_op = tf.summary.merge_all() # 合并所有可采集事件
sum_train_op = tf.summary.merge([loss_summary, acc_summary]) # 合并单独事件

三、tf.summary.scalar

tf.summary.scalar用于记录标量信息,统计各个node输出tensor的标量值,在浏览器显示如下:

这里是一个示例代码,记录了模型的loss和acc信息:

loss_summary = tf.summary.scalar('loss', loss)
acc_summary = tf.summary.scalar('accuracy', accuracy)

四、tf.summary.histogram

tf.summary.histogram用于记录张量的取值分布,是一种记录时序数据的好方法。在TensorBoard的Scalar面板下会展示大量的数据,使用SketchPad的方式,可以;在TensorBoard的Histogram面板下会展示取值分布,如下图所示:

下面是一个示例代码,记录全局参数的取值分布:

for i, variable in enumerate(tf.trainable_variables()):
   tf.summary.histogram("weights_{}".format(i), variable)

五、tf.summary.image

在训练CNN的时候,可以使用tf.summary.image来记录输入图片和卷积层输出的feature map,使模型的可视化更为直观。在TensorBoard的Images面板下展示,如下图所示:

下面是一个示例代码,记录卷积层的输出:

conv1_reshape = tf.reshape(conv1_output, [-1, 28, 28, 32])
tf.summary.image('Conv1', conv1_reshape, max_outputs=10)

六、tf.summary.FileWriter

tf.summary.FileWriter用于将所有采集到的事件写入到磁盘中。其中graph参数用于显示计算图,logdir参数表示日志存储位置。在启动TensorBoard的命令时,可以指定一个或多个日志目录,TensorBoard会将所有日志组合在一起,并显示可视化的结果。

train_writer = tf.summary.FileWriter(log_dir + '/train', sess.graph)
test_writer = tf.summary.FileWriter(log_dir + '/test')
merged = tf.summary.merge_all()
session.run(tf.global_variables_initializer())
for i in range(1000):
    batch = mnist.train.next_batch(100)
    summary, _= session.run([merged,  optimizer], feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
    train_writer.add_summary(summary, i)
    if i % 10 == 0:
        summary, acc = session.run([merged, accuracy], feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})
        test_writer.add_summary(summary, i)
        print('accuracy at step %s: %s' % (i, acc))
train_writer.close()
test_writer.close()

七、tf.summary.create

在定义变量的时候,可以通过tf.summary.create来对关键节点进行诊断,帮助我们快速发现问题。下面是一个示例代码,记录梯度和权重信息:

# compute gradients
var_grads = tf.gradients(loss, variables)
for grad, var in zip(var_grads, variables):
    tf.summary.histogram(var.name + '/gradient', grad)
    tf.summary.histogram(var.name + '/weight', var)

结语

以上就是对于tf.summary的详细解读,通过使用tf.summary我们可以更加清晰的了解模型的训练情况,定位问题,提高模型的可视化能力和调试效率。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/241866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:44
下一篇 2024-12-12 12:44

相关推荐

  • 深入了解tf.nn.bias_add()

    tf.nn.bias_add() 是 TensorFlow 中使用最广泛的 API 之一。它用于返回一个张量,该张量是输入张量+传入的偏置向量之和。在本文中,我们将从多个方面对 t…

    编程 2025-04-23
  • 深入探讨tf.estimator

    TensorFlow是一个强大的开源机器学习框架。tf.estimator是TensorFlow官方提供的高级API,提供了一种高效、便捷的方法来构建和训练TensorFlow模型…

    编程 2025-04-23
  • TensorFlow中的tf.log

    一、概述 TensorFlow(简称TF)是一个开源代码的机器学习工具包,总体来说,TF构建了一个由图所表示的计算过程。在TF的基本概念中,其计算方式需要通过节点以及张量(Tens…

    编程 2025-04-23
  • TensorFlow中的tf.add详解

    一、简介 TensorFlow是一个由Google Brain团队开发的开源机器学习框架,被广泛应用于深度学习以及其他机器学习领域。tf.add是TensorFlow中的一个重要的…

    编程 2025-04-23
  • tf.einsum 在TensorFlow 2.x中的应用

    一、什么是tf.einsum tf.einsum是TensorFlow的一个非常有用的API,这个函数被用于执行Einstein求和约定的张量积运算,可以在不创建中间张量的情况下计…

    编程 2025-02-25
  • 深入浅出: TensorFlow tf.stack

    一、简介 tf.stack提供了一种沿新轴堆叠张量列表的方法。它接受一系列张量,并返回所有张量堆叠在一起的单个张量。新轴的位置取决于axis参数的值。tf.stack和tf.con…

    编程 2025-01-27
  • 用tf.random_normal_initializer生成随机数的方法

    一、tf.random_normal_initializer是什么 在TensorFlow中,随机初始化是模型训练中非常重要的一步。tf.random_normal_initial…

    编程 2025-01-16
  • tensorflow中的tf.square函数

    一、概述 在tensorflow中,tf.square是一个很常用的函数,它的作用是计算矩阵中每个元素的平方,并返回一个新的矩阵。在实际的深度学习应用中,tf.square函数常用…

    编程 2025-01-13
  • 了解tf.train.adamoptimizer

    在神经网络的训练中,优化器算法至关重要。其中,Adam优化器也是一种常用的优化算法。TensorFlow提供了tf.train.AdamOptimizer来实现Adam优化算法,本…

    编程 2025-01-09
  • 浅析tf.float32

    一、tf.float32与np.float32 在深度学习中,tf.float32是一种常见的数据类型,用来表示32位浮点数。与之相似的是np.float32,它同样也是用来表示3…

    编程 2025-01-02

发表回复

登录后才能评论