Tensorflow之调试(Debug)及打印变量
参考资料:https://wookayin.github.io/tensorflow-talk-debugging
几种常用方法:
1.通过Session.run()获取变量的值
2.利用Tensorboard查看一些可视化统计
3.使用tf.Print()和tf.Assert()打印变量
4.使用Python的debug工具: ipdb, pudb
5.利用tf.py_func()向图中插入自定义的打印代码, tdb
6.使用官方debug工具: tfdbg
复习:
tensorflow是通过先建图再运行的方式进行运行,这就使得我们写在图建立过程中的输出语句在图运行的时候并不能得到执行,从而使得调试困难. 我们想在运行过程中,对训练的一些变量进行追踪和打印,对一些错误进行输出分析,下面介绍几种在tensorflow中进行debug的方法.
详细介绍:
1.通过Session.run()获取变量的值
一个简单的例子:

优点:简单易行
缺点:必须要在图中保持需要观察的变量,必须要进行一次完整的运行
比如我们要获取各个层的输出,会变得很繁琐:

可以通过词典或者新建一个类来改善这一情况:
词典:

类:

2.利用Tensorboard查看一些可视化统计
Tensoboard简单使用方法:http://www.cnblogs.com/huangshiyu13/p/7562990.html
3.使用tf.Print()和tf.Assert()打印变量

一个简单例子:

在前7次迭代中,它会输出预测的label,如下图所示:

缺点:函数过于简单,没法在满足一定条件下进行输出,或者隔多少次迭代才进行一次输出.

这个函数在condition等于False的时候进行输出data的值,并且抛出异常,summarize决定输出多少变量值
使用方法:

或者可以:

或者把所有的Assert操作加入collection:

官方也提供了一些assert相关的函数: https://www.tensorflow.org/versions/r0.12/api_docs/python/check_ops.html#asserts-and-boolean-checks

4.使用Python的debug工具: ipdb, pudb
5.利用tf.py_func()向图中插入自定义的打印代码

简单例子:

另一个例子:

一个第三方debug工具: https://github.com/ericjang/tdb

6.使用官方debug工具: tfdbg
Tensorflow之调试(Debug)及打印变量的更多相关文章
- Tensorflow之调试(Debug) && tf.py_func()
Tensorflow之调试(Debug)及打印变量 tensorflow调试tfdbg 几种常用方法: 1.通过Session.run()获取变量的值 2.利用Tensorboard查看一些可视化统计 ...
- Eclipse调试DEBUG时快速查看某个变量的值的快捷键、快速跳转到某行的快捷键
Eclipse调试DEBUG时快速查看某个变量的值的快捷键 Ctrl + Shift + i
- smali插入log,打印变量
一:Log打印变量: Log打印字符串: #liyanzhong debug const-string v1, "TAG" const-string v2, "xunbu ...
- tensorflow BasicRNNCell调试
运行以下代码,进入~/anaconda3/lib/python3.5/site-packages/tensorflow/python/ops/rnn.py和~/anaconda3/lib/python ...
- Android Studio中JNI程序的单步调试和日志打印
近日有个算法(检测碰撞)需要用C++实现,目的是IOS和ANDROID中共享同一段程序. 下面说说android调用这段程序过程中遇到的一些事情.(过程中网上搜索了一些相关文章,大部分说的是eclip ...
- tensorflow tfdbg 调试手段
https://blog.csdn.net/gubenpeiyuan/article/details/82710163 TensorFlow 调试程序 tfdbg 是 TensorFlow 的专用调试 ...
- 解决Myeclipse在调试(debug)时无法显示变量值问题
解决Myeclipse在调试(debug)时无法显示变量值问题 突然发现myeclipse在调试时当鼠标放在变量上面时无法显示变量值了 ctrl+shift+D居然提示cannot be resolv ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- java中打印变量地址
在java中打印变量的地址 这个代码是在startoverflow上看到的,跟大家分享一下. import sun.misc.Unsafe; import java.lang.reflect.Fiel ...
随机推荐
- 性能测试工具--SIEGE安装及使用简介 siege压力测试
官方网站http://www.joedog.org/ 概述 Siege是一个多线程http负载测试和基准测试工具.它有3种操作模式: 1) Regression (when invoked by bo ...
- C语言 · 年龄巧合
标题:年龄巧合 小明和他的表弟一起去看电影,有人问他们的年龄.小明说:今年是我们的幸运年啊.我出生年份的四位数字加起来刚好是我的年龄.表弟的也是如此.已知今年是2014年,并且,小明说的年龄指的是周岁 ...
- Guava Cache用法介绍<转>
Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效.Guava官网介绍,下面的这几种情况可以考虑使用Guava Cache: 愿意消耗一些内存空间来提 ...
- windows保存的文件传输到linux中格式转换
直接从window传输到linux的脚本执行时,会出现以下错误. -bash: xxx: /bin/sh^M: bad interpreter: No such file or directory 解 ...
- EasyPermissions的流程
在app的build.gradle文件的dependencies中,添加依赖: implementation 'pub.devrel:easypermissions:1.3.0' import and ...
- 64位 windows10,安装配置MYSQL8.0.13
MySQL的安装配置过程,一查网上一大堆,但是每个人在安装配置的过程中都会碰到一些问题,因为安装的版本不一样,有些命令可能就不适用了.所以安装之前一定先确认好你的版本号. 下面开始安装MYSQL8.0 ...
- Java编程常见缺陷汇总(一)
[案例1] public boolean equalNode(JudgeNode a, JudgeNode b) { return a.getId() == b.getId(); } [点评] 应在 ...
- JPA唯一索引更新删除的问题
本来的功能是更新,我的做法是先删除再新增.表设置了字段A和字段B的唯一主键,先删除这个字段再新增一一模一样的值(包含字段A和字段B)时会报唯一主键的值重复了,百度了下,没找到原因,于是就不删除记录了, ...
- JavaSE assert断言的学习
在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语 ...
- 写jquery插件(转载)
如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...