Tensorflow - Tutorial (6) : TensorBoard 可视化工具

2024-05-05 16:32

本文主要是介绍Tensorflow - Tutorial (6) : TensorBoard 可视化工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. TensorBoard

为了更方便 TensorFlow 程序的理解、调试与优化,TensorFlow发布了一套叫做 TensorBoard 的可视化工具。可以用 TensorBoard 来展现 TensorFlow 图像,绘制图像生成的定量指标图以及附加数据。TensorBoard可生成以下4类信息:

  • Event: 展示训练过程中的统计数据(最值,均值等,误差)变化情况
  • Image: 展示训练过程中记录的图像
  • Graph: 展示模型的结构
  • Histogram: 展示训练过程中记录的数据的分布图

本文以 Tensorflow - Tutorial (4) 中的CNN手写数字识别代码为例,对TensorBoard的相关操作进行演示

用 with tf.name_scope() 为变量名划定范围,同一范围的变量在图中属于同一层级,并且通过”name”属性对变量指定名称

with tf.name_scope('inputs'):X = tf.placeholder("float", [None, 28, 28, 1], name = 'X')Y = tf.placeholder("float", [None, 10], name = 'Y')

通过下面代码可查看权重w在训练过程中的变化情况,其中”w_1”是生成的图表的名字

tf.histogram_summary("w_1", w)

通过如下语句查看测试集中预测准确率和loss随迭代次数的变化情况

tf.scalar_summary("accuracy", acc_op)
tf.scalar_summary('loss', cost)

通过如下语句将所有的summary进行合并,一起进行SummaryWriter

merged = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("logs/", sess.graph)

每一轮迭代结束后,通过如下语句记录所有的summary

writer.add_summary(summary, i)  # Write summary

代码运行完毕后,logs文件夹下会生成一个包含time stamp的tfevents文件,进入logs文件夹所在目录,在命令行中输入如下命令来启动TensorBoard

tensorboard --inspect --logdir=logs/

用浏览器打开命令行中显示的url地址,若在结果显示上出现问题,可参考:Frequently Asked Questions

这里写图片描述

2. 代码

#!/usr/bin/env python
#coding:utf-8
import tensorflow as tf
import numpy as np
import input_databatch_size = 128
test_size = 256def init_weights(shape, s):return tf.Variable(tf.random_normal(shape, stddev=0.01), name = s)def model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden):with tf.name_scope('layer_1'):    l1a = tf.nn.relu(tf.nn.conv2d(X, w,                       # l1a shape=(?, 28, 28, 32)strides=[1, 1, 1, 1], padding='SAME'))l1 = tf.nn.max_pool(l1a, ksize=[1, 2, 2, 1],              # l1 shape=(?, 14, 14, 32)strides=[1, 2, 2, 1], padding='SAME')l1 = tf.nn.dropout(l1, p_keep_conv)with tf.name_scope('layer_2'):   l2a = tf.nn.relu(tf.nn.conv2d(l1, w2,                     # l2a shape=(?, 14, 14, 64)strides=[1, 1, 1, 1], padding='SAME'))l2 = tf.nn.max_pool(l2a, ksize=[1, 2, 2, 1],              # l2 shape=(?, 7, 7, 64)strides=[1, 2, 2, 1], padding='SAME')l2 = tf.nn.dropout(l2, p_keep_conv)with tf.name_scope('layer_3'): l3a = tf.nn.relu(tf.nn.conv2d(l2, w3,                     # l3a shape=(?, 7, 7, 128)strides=[1, 1, 1, 1], padding='SAME'))l3 = tf.nn.max_pool(l3a, ksize=[1, 2, 2, 1],              # l3 shape=(?, 4, 4, 128)strides=[1, 2, 2, 1], padding='SAME')l3 = tf.reshape(l3, [-1, w4.get_shape().as_list()[0]])    # reshape to (?, 2048)l3 = tf.nn.dropout(l3, p_keep_conv)with tf.name_scope('layer_4'):l4 = tf.nn.relu(tf.matmul(l3, w4))l4 = tf.nn.dropout(l4, p_keep_hidden)with tf.name_scope('layer_5'):pyx = tf.matmul(l4, w_o)return pyxmnist = input_data.read_data_sets("MNIST_data/", one_hot=True)trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels
trX = trX.reshape(-1, 28, 28, 1)  
teX = teX.reshape(-1, 28, 28, 1)  
with tf.name_scope('inputs'):X = tf.placeholder("float", [None, 28, 28, 1], name = 'X')Y = tf.placeholder("float", [None, 10], name = 'Y')p_keep_conv = tf.placeholder("float", name = 'pro_dropout_conv') p_keep_hidden = tf.placeholder("float", name = 'pro_dropout_hidden')with tf.name_scope('weights'):w = init_weights([3, 3, 1, 32],"w_1") w2 = init_weights([3, 3, 32, 64],"w_2")w3 = init_weights([3, 3, 64, 128], "w_3")w4 = init_weights([128 * 4 * 4, 625], "w_4")w_o = init_weights([625, 10], "w_o")# Add histogram summaries for weightstf.histogram_summary("w_1", w)tf.histogram_summary("w_2", w2)tf.histogram_summary("w_3", w3)tf.histogram_summary("w_4", w4)tf.histogram_summary("w_o", w_o)py_x = model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden)
with tf.name_scope('loss'):cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(py_x, Y))tf.scalar_summary('loss', cost) # Add scalar summary for cost
with tf.name_scope('train'):train_op = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost)
with tf.name_scope('prediction'):correct_pred = tf.equal(tf.argmax(Y, 1), tf.argmax(py_x, 1)) # Count correct predictionsacc_op = tf.reduce_mean(tf.cast(correct_pred, "float")) # Cast boolean to float to average# Add scalar summary for accuracytf.scalar_summary("accuracy", acc_op)
# Launch the graph in a session
with tf.Session() as sess:merged = tf.merge_all_summaries()writer = tf.train.SummaryWriter("logs/", sess.graph)# create a log writertf.initialize_all_variables().run()for i in range(30):loss_sum = 0.0training_batch = zip(range(0, len(trX), batch_size),range(batch_size, len(trX)+1, batch_size))for start, end in training_batch:_, loss_value, summary = sess.run([train_op, cost, merged], feed_dict={X: trX[start:end], Y: trY[start:end],p_keep_conv: 0.8, p_keep_hidden: 0.5})loss_sum +=loss_valueprint i, loss_sumsummary = sess.run(merged, feed_dict={X: teX, Y: teY, p_keep_conv: 1.0, p_keep_hidden: 1.0})writer.add_summary(summary, i)  # Write summary

3. 结果

  1. 在EVENTS中查看预测准确率和loss随迭代次数的变化情况

图片名称

  1. 在GRAPH中查看CNN模型的结构

图片名称

  1. 在HISTOGRAMS中查看权重的变化情况

图片名称

这篇关于Tensorflow - Tutorial (6) : TensorBoard 可视化工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962143

相关文章

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

husky 工具配置代码检查工作流:提交代码至仓库前做代码检查

提示:这篇博客以我前两篇博客作为先修知识,请大家先去看看我前两篇博客 博客指路:前端 ESlint 代码规范及修复代码规范错误-CSDN博客前端 Vue3 项目开发—— ESLint & prettier 配置代码风格-CSDN博客 husky 工具配置代码检查工作流的作用 在工作中,我们经常需要将写好的代码提交至代码仓库 但是由于程序员疏忽而将不规范的代码提交至仓库,显然是不合理的 所