这篇文章主要讲讲TensorBoard的基本使用以及name_scope和variable_scope的区别

一、入门TensorBoard

首先来讲讲TensorBoard是什么吧,我当时是在官方文档里学习的,官网也放出了介绍TensorBoard的视频。我在b站搜了一把,发现也有,大家可以先去看看视频了解一下(其实已经说得很好了):

  • https://www.bilibili.com/video/av35203293?from=search&seid=6605552834229124959

为了更方便 TensorFlow 程序的理解、调试与优化,于是就有了TensorBoard 这样的的可视化工具

因为我们编写出来的TensorFlow程序,建好一个神经网络,其实我们也不知道神经网络里头具体细节到底做了什么,要人工调试十分困难(就好比你无法想象出递归的所有步骤一样)。有了TensorBoard,可以将TensorFlow程序的执行步骤都显示出来,非常直观。并且,我们可以对训练的参数(比如loss值)进行统计,用的方式来查看变化的趋势。

1.1 name_scope和variable_scope

在视频中其实也有提到,我们想要TensorBoard的图能够更好地展示(更加有条理),那一般我们需要对其用name_scope取名。

那除了name_scope,还有一个叫做variable_scope。那他们有什么区别呢?顾名思义,name_scope是一个名称作用域,variable_scope是变量作用域。

在前面文章中,创建变量有两种方式,一种是用tf.get_variable()来创建,一种是用tf.Variable()来创建。这两种创建方式也是有区别的。

  • tf.name_scope下时,tf.get_variable()创建的变量名不受 name_scope 的影响,而且在未指定共享变量时,如果重名就会报错。tf.Variable()会自动检测有没有变量重名,如果有则会自行处理(自动创建一个)

比如下面的代码:

with tf.name_scope('name_sp1') as scp1:with tf.variable_scope('var_scp2') as scp2:with tf.name_scope('name_scp3') as scp3:a = tf.Variable('a')b = tf.get_variable('b')

等同于:

with tf.name_scope('name_sp1') as scp1:with tf.name_scope('name_sp2') as scp2:with tf.name_scope('name_scp3') as scp3:a = tf.Variable('a')with tf.variable_scope('var_scp2') as scp2:b = tf.get_variable('b')

这里体现的是如果用get_variable的方式来创建对象,是不受name_scope所影响的。


要注意的是,下面的代码会报错。因为在scp作用域下压根就没有a这个变量,同时又设置成reuse=True。这里因为的是找不到共享变量而出错

with tf.variable_scope('scp', reuse=True) as scp:a = tf.get_varialbe('a') #报错

同样地,下面的代码也会报错,因为明明已经有共享变量了,但设置成reuse=false。所以就会报错。

with tf.variable_scope('scp', reuse=False) as scp:    a = tf.get_varialbe('a')a = tf.get_varialbe('a') #报错

最后,我们再来看这个例子,应该就可以看懂了。

with tf.variable_scope('variable_scope_y') as scope:var1 = tf.get_variable(name='var1', shape=[1], dtype=tf.float32)scope.reuse_variables()  # 设置共享变量var1_reuse = tf.get_variable(name='var1')var2 = tf.Variable(initial_value=[2.], name='var2', dtype=tf.float32)var2_reuse = tf.Variable(initial_value=[2.], name='var2', dtype=tf.float32)with tf.Session() as sess:sess.run(tf.global_variables_initializer())print(var1.name, sess.run(var1))print(var1_reuse.name, sess.run(var1_reuse))print(var2.name, sess.run(var2))print(var2_reuse.name, sess.run(var2_reuse))
# 输出结果:
# variable_scope_y/var1:0 [-1.59682846]
# variable_scope_y/var1:0 [-1.59682846]   可以看到变量var1_reuse重复使用了var1
# variable_scope_y/var2:0 [ 2.]
# variable_scope_y/var2_1:0 [ 2.]

参考资料:

  • https://www.zhihu.com/question/54513728

1.2 TensorBoard例子

下面我们来看一个TensorBoard简单的入门例子,感受一下:

def learn_tensor_board_2():# prepare the original datawith tf.name_scope('data'):x_data = np.random.rand(100).astype(np.float32)y_data = 0.3 * x_data + 0.1##creat parameterswith tf.name_scope('parameters'):with tf.name_scope('weights'):weight = tf.Variable(tf.random_uniform([1], -1.0, 1.0))tf.summary.histogram('weight', weight)with tf.name_scope('biases'):bias = tf.Variable(tf.zeros([1]))tf.summary.histogram('bias', bias)##get y_predictionwith tf.name_scope('y_prediction'):y_prediction = weight * x_data + bias##compute the losswith tf.name_scope('loss'):loss = tf.reduce_mean(tf.square(y_data - y_prediction))tf.summary.scalar('loss', loss)##creat optimizeroptimizer = tf.train.GradientDescentOptimizer(0.5)# creat train ,minimize the losswith tf.name_scope('train'):train = optimizer.minimize(loss)# creat initwith tf.name_scope('init'):init = tf.global_variables_initializer()##creat a Sessionsess = tf.Session()# mergedmerged = tf.summary.merge_all()##initializewriter = tf.summary.FileWriter("/Users/zhongfucheng/tensorboard/loss-2", sess.graph)sess.run(init)## Loopfor step in range(201):sess.run(train)rs = sess.run(merged)writer.add_summary(rs, step)if __name__ == '__main__':learn_tensor_board_2()# 启动完了之后,要在命令行上运行tensor_board的命令,指定其目录,最后我们就可以通过6006的默认端口访问我们的图。

(例子来源网络,我改动了一下,出处我忘了,侵删~)

接下来,我们启动一下TensorBoard,看看图是怎么样的,启动命令如下:

tensorboard --logdir=/Users/zhongfucheng/tensorboard/loss-2

启动成功的图:

通过6006端口我们去访问一下,首先我们可以检测到loss值的变更:

我们也可以查看TensorFlow程序大概的执行步骤:

参数w和b的直方图:

总之,TensorBoard可以方便地查看我们参数的变化,以便更好理解我们写的代码。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

什么是TensorBoard?相关推荐

  1. tensorboard merge报错_什么是TensorBoard?

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 回顾前面: 从零开始学TensorFlow[01-搭 ...

  2. TensorFlow(2)图(默认图与自定义图) TensorBoard可视化

    目录 一.图 1.默认图 1.调用方法查看默认图属性 2..graph查看图属性 代码 2.自定义图(创建图) 1.创建自定义图 2.创建静态图 3.开启会话(运行) 4.查看自定义图 代码 二.Te ...

  3. TensorFlow之图结构与TensorBoard可视化

    TensorFlow之图结构与TensorBoard可视化 1.1 什么是图结构 图包含了一组tf.Operation代表的计算单元对象和tf.Tensor代表的计算单元之间流动的数据. 1.2 图相 ...

  4. 学习笔记CB013: TensorFlow、TensorBoard、seq2seq

    2019独角兽企业重金招聘Python工程师标准>>> tensorflow基于图结构深度学习框架,内部通过session实现图和计算内核交互. tensorflow基本数学运算用法 ...

  5. tensorflow中Tensorboard的用法

    tensorflow中Tensorboard的用法 下面代码定义了一个简单的用于实现常量加法和乘法的计算图. import tensorflow as tf input1 = tf.constant( ...

  6. 【tensorboard】从tensorboard上看出模型是否存在过拟合

    tensorboard还是一个很好的工具,可以图形化看到训练模型相关的数据 SCALARS 一些指标数据的趋势图,比如accuracy,loss等 这个图比较直观,也简单易懂 下图为epoch acc ...

  7. 云环境上如何使用tensorboard

    笔者使用的是华为云,在云上使用tensorflow做训练.训练的log使用tensorboard查看时,在公网上查看时遇到了一点点问题.记录一下问题的解决. 1. 为云服务器购买公网IP 如果云服务器 ...

  8. keras和tensorflow使用 keras.callbacks.TensorBoard 可视化数据

    此文首发于我的个人博客:keras和tensorflow使用 keras.callbacks.TensorBoard 可视化数据 - zhang0peter的个人博客 TensorBoard 是一个非 ...

  9. TensorBoard可视化网络结构和参数Tensorboard windows显示空白

    Tensorboard显示空白,或者graphs中显示"No graph definition files were found",在数据正确的前提下,最可能是路径的问题. Win ...

  10. Tensorflow 可视化 TensorBoard 尝试~

    tensorboard --logdir=/home/ubuntu/temp/log 注意:在阅读本文之前,请务必更新你的浏览器.Chrome大法好!  数据.模型可视化是TensorFlow的一项重 ...

最新文章

  1. Docker 入门终极指南:边学边用
  2. Oracle 11g 数据库启动和关闭
  3. 机器视觉-halcon学习笔记1
  4. 动态规划——K号数(蓝桥杯试题集)
  5. 阿里面试题剖析,如何保证消息不被重复消费?
  6. Reading HTML content from a UIWebView
  7. HTML静态网页我的家乡,html网站家乡 !
  8. PuTTY/PuttyGen创建密钥及利用密钥登录服务器
  9. Apple苹果EDI案例
  10. 腾讯android一键root工具,腾讯一键root手机版
  11. 【JAVA】文件储存——File
  12. 企业微信链接适配安卓ios移动端问题汇总
  13. 2021 年最新的个人录制的前后端真正的免费编程学习视频
  14. scratch绘制花瓣 少儿编程电子学会图形化编程scratch等级考试四级真题和答案解析2021-3
  15. for example: not eligible for auto-proxying问题排查
  16. 网狐、6878 您所填写的推荐人不存在或者填写错误,请检查后再次注册
  17. 浅析Fusion-IO和Intel SSD
  18. 环保认证油烟监测装置餐饮业油烟污染如何治理?
  19. 记:freeswitch-1.10.7 aarch64交叉编译
  20. 研究语音和音频编解码的相关大学和链接

热门文章

  1. 非递归中序,后序,先序遍历二叉树完整代码(用链式栈实现)
  2. python和数据库_python与数据库操作
  3. 命令行怎么关闭自动修复此计算机,cmd重启命令(win10怎么跳过自动修复)
  4. 大学计算机和英语社团加那个,大学里哪些社团值得加入
  5. 【第7篇】Python爬虫实战-收集gitee中的issue问题
  6. 手把手教你启动若依单体项目
  7. 事业单位计算机知识c语言,事业单位考试计算机基础知识C语言程序设计
  8. centos7解压安装mysql_CentOS7 安装Mysql5.7 解压缩版
  9. javax maven项目缺少_教育平台项目后台管理系统:介绍与搭建
  10. android 编译sdk,android编译sdk