【tensorflow】——tensorboard可视化计算图以及参数曲线图loss图

参考文献:

https://zhuanlan.zhihu.com/p/71328244

目录

1.可视化计算图

2.可视化参数

3. 远程tensorboard

4、报错


真是出来混迟早是要还的,之前一直拒绝学习Tensorboard,因为实在是有替代方案,直到发现到了不得不用的地步。下面主要介绍一下怎么使用Tensorboard来可视化参数,损失以及准确率等变量。

1.可视化计算图

下面是一个单层网络的手写体分类示例:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data", one_hot=True)batch_size = 100
n_batch = mnist.train.num_examples // batch_sizewith tf.name_scope('input'):x = tf.placeholder(dtype=tf.float32, shape=[None, 784], name='x_input')y = tf.placeholder(dtype=tf.int32, shape=[None, 10], name='y_input')with tf.name_scope('layer'):with tf.name_scope('weights'):W = tf.Variable(tf.random_uniform([784, 10]), name='w')with tf.name_scope('biases'):b = tf.Variable(tf.zeros(shape=[10], dtype=tf.float32), name='b')with tf.name_scope('softmax'):prediction = tf.nn.softmax(tf.nn.xw_plus_b(x, W, b))
with tf.name_scope('Loss'):loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
with tf.name_scope('train'):train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
with tf.name_scope('acc'):correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))with tf.Session() as sess:sess.run(tf.global_variables_initializer())writer = tf.summary.FileWriter('logs/', sess.graph)for epoch in range(20):for batch in range(n_batch):batch_x, batch_y = mnist.train.next_batch(batch_size)_, accuracy = sess.run([train_step, acc], feed_dict={x: batch_x, y: batch_y})if batch % 50 == 0:print("### Epoch: {}, batch: {} acc on train: {}".format(epoch, batch, accuracy))accuracy = sess.run(acc, feed_dict={x: mnist.test.images, y: mnist.test.labels})print("### Epoch: {},  acc on test: {}".format(epoch, accuracy))

其计算图的可视化结果如下所示:

 

 

其中图中灰色的圆角矩形就是代码中的一个个命名空间tf.name_scope(),而且命名空间是可以嵌套定义的。从计算图中,可以清楚的看到各个操作的详细信息,以及数据量的形状和流向等。这一操作的实现,就全靠第31行代码。执行完这句代码后,会在你指定路径(此处为代码所在路径的logs文件夹中)中生成一个类似名为events.out.tfevents.1561711787的文件。其打开步骤如下:

  • 首先需要安装tensorflowtensorboard
  • 打开命令行(Linux终端),进入到log的上一层目录;
  • 运行命令tensorboard --logdir=logs
  • 如果成功,则会有以下提示:
    • TensorBoard 1.5.1 at http://DESKTOP-70LJI62:6006 (Press CTRL+C to quit)

  • 如果有任何报错,最直接的办法就是卸载tensorflow重新安装,若是有多个环境建议用Anaconda管理
  • 将后面的地址粘贴到浏览器中(最好是谷歌),然后就能看到了,可以双击各个结点查看详细信息

2.可视化参数

可视化网络计算图不是太有意义,而更有意义的是在训练网络的同时能够看到一些参数的变换曲线图(如:准确率,损失等),以便于更好的分析网络。

 

 

要实现这个操作,只需要添加对应的tf.summary.scalar('acc', acc)语句即可,然后最后合并所有的summary即可。但是,通常情况下网络层的参数都不是标量,而是矩阵这类的;对于这种变量,通常的做法就是计算其最大、最小、平均值以及直方图等。由于对于很多参数都会用到同样的这几个操作,所以在这里就统一定义函数:

def variable_summaries(var):with tf.name_scope('summaries'):mean = tf.reduce_mean(var)tf.summary.scalar('mean', mean)with tf.name_scope('stddev'):stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))tf.summary.scalar('stddev', stddev)tf.summary.scalar('max', tf.reduce_max(var))tf.summary.scalar('min', tf.reduce_min(var))tf.summary.histogram('histogram', var)

然后在需要可视化参数的地方,调用这个函数即可。

mnist = input_data.read_data_sets("MNIST_data", one_hot=True)batch_size = 100n_batch = mnist.train.num_examples // batch_size
with tf.name_scope('input'):x = tf.placeholder(dtype=tf.float32, shape=[None, 784], name='x_input')y = tf.placeholder(dtype=tf.int32, shape=[None, 10], name='y_input')with tf.name_scope('layer'):with tf.name_scope('weights'):W = tf.Variable(tf.random_uniform([784, 10]), name='w')variable_summaries(W)####with tf.name_scope('biases'):b = tf.Variable(tf.zeros(shape=[10], dtype=tf.float32), name='b')variable_summaries(b)with tf.name_scope('softmax'):prediction = tf.nn.softmax(tf.nn.xw_plus_b(x, W, b))
with tf.name_scope('Loss'):loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))tf.summary.scalar('loss', loss)
with tf.name_scope('train'):train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
with tf.name_scope('acc'):correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))tf.summary.scalar('acc', acc)merged = tf.summary.merge_all()
with tf.Session() as sess:sess.run(tf.global_variables_initializer())writer = tf.summary.FileWriter('logs/', sess.graph)for epoch in range(20):for batch in range(n_batch):batch_x, batch_y = mnist.train.next_batch(batch_size)_, summary, accuracy = sess.run([train_step, merged, acc], feed_dict={x: batch_x, y: batch_y})if batch % 50 == 0:print("### Epoch: {}, batch: {} acc on train: {}".format(epoch, batch, accuracy))writer.add_summary(summary, epoch * n_batch + batch)accuracy = sess.run(acc, feed_dict={x: mnist.test.images, y: mnist.test.labels})print("### Epoch: {},  acc on test: {}".format(epoch, accuracy))

如上代码中的第14、17、22、28行所示。最后,在每次迭代的时候,将合并后的merged进行计算并写道本地文件中(第40行)。最后,按照上面的方法,用tensorboard打开即可。

注:这个不用等到整个过程训练完才能可视化,而是你在训练过程中就能看到的,而且是每30秒根据生成的数据刷新一次,还是很Nice的。

 

 

3. 远程tensorboard

由于条件所限,通常在进行深度学习时都是在远处的服务器上进行训练的,所以此时该怎么在本地电脑可视化呢?答案是利用SSH的方向隧道技术,将服务器上的端口数据转发到本地对应的端口,然后就能在本地方法服务器上的日志数据了。

从上面连接成功后的提示可以知道,tensorboard所用到的端口时6006(没准儿哪天就换了),所以我们只需将该端口的数据转发到本地即可。

  • ssh -L 16006:127.0.0.1:6006 account@server.address
  • 其中16006是本地的任意端口,只要不和本地应用有冲突就行,随便写;
  • 后面的account指你服务器的用户名,紧接是Ip

windows的话,直接在命令行里执行这条令就行(也不知道啥时候windows命令行也支持ssh了)

在登陆成功后(此时已远程登陆了服务器),同样进入到logs目录的上层目录,然后运行tensorboard --logdir=logs;最后,在本地浏览器中运行127.0.0.1:16006即可。

 

4、报错

可能会出“AttributeError: module 'tensorflow' has no attribute 'io'”错误

这可能是因为tensorboard版本过高或者和tensorflow版本不匹配导致

本人tensorflow版本为1.5.0,tensorboard版本为1.8.0,最终解决了报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lab01:Xv6 and Unix utilities

实验测试方法 实验的测试方法主要有2个: 进入到Xv6系统中,执行相应的命令使用实验提供的评分测试 对于单个实验,可以使用 make GRADEFLAGSapplication grade其中application为要测试的实验应用,例如sleep实验对应的评分测试命令…

jQuery学习- 位置选择器

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>位置选择器</title><script src"js/jquery.js"></script><script type"text/javascript">$(function(){//获取第一个li$(&quo…

数据类型之元组

存多个值&#xff0c;对比列表来说&#xff0c;元组不可变&#xff08;是可以当做字典的key的&#xff09;&#xff0c;主要是用来读 与列表类型比&#xff0c;只不过[]换成()age(11,22,33,44,55) #本质agetuple((11,22,33,44,55)) print(type(age)) age[0]12 t(1,2,[a,b]) pri…

cocos2d-x3.6 连连看连通画线

我的博客&#xff1a;http://blog.csdn.net/dawn_moon 网上看到非常多人写的连连看&#xff0c;都没有画连线的实现。事实上要话连线挺简单的。cocos2d-x 提供了一个非常方便的绘图形的类。DrawNode。这个类封装了非常多画线条&#xff0c;多边形的方法。非常方便&#xff0c;非…

阿里云大数据计算服务MaxCompute(上篇)

关于阿里云大数据计算服务MaxCompute的详细内容&#xff1a; 阿里云大数据计算服务MaxCompute使用教程 &#xff08;MaxCompute&#xff08;原ODPS&#xff09;是一项大数据计算服务&#xff0c;它能提供快速、完全托管的PB级数据仓库解决方案&#xff0c;使您可以经济并高效的…

Vue3、TypeScript 实现图片数量及大小随宽度自适应调整

前言 过了这么久&#xff0c;想起自己还有个博客&#xff0c;更点内容吧&#xff01; 来&#xff0c;上需求&#xff01; 最近在做个前端界面&#xff0c;要求在一行中展示一些图片&#xff0c;展示的图片数量随着窗口宽度大小进行变化&#xff0c;除此之外还有以下要求&…

【tensorFlow】——图像数据增强、读取图像、保存图像

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/4/13 10:54 # @Author : @linlianqin # @Site : # @File : 数据增强(distorted).py # @Software: PyCharm # @description:一些基于TensorFlow的数据处理方法import tensorflow as tf import cv2 im…

数据分析方法有哪些_数据分析方法

数据分析方法有哪些_数据分析方法 随着大数据的到来&#xff0c;数据分析师成为大数据时代一颗冉冉升起的新星&#xff0c;现在企业越来越重视大数据&#xff0c;数据分析师这个职业也成为企业争抢的对象。那么数据分析师的分析数据的方法都有哪些呢&#xff1f; 1、数据分析遵…

苹果Iphone/Ipad--L2T虚拟教程

1 Iphone和Ipad同为IOS&#xff0c;设置方法相同。首先进入IOS系统的“设置”程序。 2 点击“通用”进入通用设置&#xff0c;点击“”; 3 选择"添加设置 "&#xff1b; 4 选择L2TP方式&#xff0c;填写必要信息&#xff1a;描述、服务器地址 、您注册充值的账号及密…

记忆化搜索的应用

记忆化搜索的应用 一般来说&#xff0c;动态规划总要遍历所有的状态&#xff0c;而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝&#xff0c;可能剪去大量不必要的状态&#xff0c;因此在空间开销上往往比动态规划要低很多。 如何协调好动态规划的高效率与高消费之间的…

【深度学习】——DNN后向传播、CNN后向传播文章汇总

深度神经网络&#xff08;DNN&#xff09;模型与前向传播算法 深度神经网络&#xff08;DNN&#xff09;反向传播算法(BP) 卷积神经网络CNN的前向和后向传播&#xff08;一&#xff09; 卷积神经网络CNN的前向和后向传播&#xff08;二&#xff09; 有batch normalization的卷积…

ajaxReturn 之前dump调试,导致$.ajax不能正常运行

ajaxReturn 之前dump调试&#xff0c;导致$.ajax不能正常运行 以后调试的时候&#xff0c;注意下这个情况转载于:https://www.cnblogs.com/bushe/p/5180317.html

Veebot-自动静脉抽血机器人

Veebot-自动静脉抽血机器人 我们可能都有过被抽血的经验。护士让你握紧拳头&#xff0c;用一根橡皮条压住你上臂的血管&#xff0c;在你的肘部内侧寻找你的静脉&#xff0c;有时还需要拍打几下&#xff0c;摸到隆起的静脉血管&#xff0c;一针下去。有时候碰到技术好的护士&…

idea 转普通项目为maven 项目

1、项目上右键 Add Framework Support。 2、选择maven&#xff0c;点击OK。 转载于:https://www.cnblogs.com/mayanze/p/8042489.html

HDOJ5547 SudoKu

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5547 题目大意&#xff1a;填数独。。。 思路&#xff1a;爆搜 1 #include <stdio.h>2 #include <string.h>3 #include <iostream>4 #include <algorithm>5 using namespace std;6 boo…

【深度学习之ResNet】——深度残差网络—ResNet总结

目录 论文名称&#xff1a;Deep Residual Learning for Image Recognition 摘要&#xff1a; 1、引言 2、为什么会提出ResNet残差网络呢&#xff1f; 3、深度残差网络结构学习&#xff08;Deep Residual learning&#xff09; &#xff08;1&#xff09;残差单元 &#xf…

Atitit.  c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0   attilax总结

Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1.1. C# 1.0-纯粹的面向对象 1.2. C# 2.0-泛型编程新概念 1.3. C# 2.0的另一个突出的特性就是匿名方法 1.4. C#3.0 linq 1.5. C# 4.0动态编程 dynamic 1.6. C# 4.5 异步编程 async和await 1.7. C# 5.0 更方便…

关于SafeMove White Paper功能

ABB机器人网站有一个 Safemove 功能的介绍&#xff0c;在Overview页面右半版有一篇文档是 SafeMove White Paper &#xff0c;在45页的 pdf 文档中&#xff0c;详细了介绍工业机器人的安全原则&#xff0c;以及ABB工业机器人自身 EPS (Electronic Position Switches) 和 SafeMo…

面试疑难点解析

List,Set,Map,有什么区别&#xff1f; List和Set实际上市实现了Collection接口&#xff0c;那么Collection接口的原理你能简单描述一下吗&#xff1f; List接口可以插入多个NULL值&#xff0c;并且重复值&#xff0c;而且LIST是一个有序的集合。 Set是一个不可重复的集合&#…

【深度学习】——日常知识点总结(持续更新)

设计卷积网络的原则&#xff1a; 1、最后转为一维有两种方式&#xff1a;1&#xff09;全局平均池化&#xff1b;2&#xff09;扁平化直接转化为一维的 2、在卷积层的大小变化时尽量保证特征图大小减小n倍时&#xff0c;特征图的个数也增加n倍&#xff0c;维持网络的复杂度&a…