1. tf.Graph().as_default() 的作用


首先看官网上的解释:

再看博主 Joanna-In-Hdu&Hust 对此比较通俗易懂的解释(https://www.cnblogs.com/studylyn/p/9105818.html

tf.Graph() 表示实例化一个类,用于 TensorFlow  计算和表示用的数据流图,通俗讲就是在代码中添加的操作(画中的结点)和数据(画中的线条)都是画在纸上的“画”,而图就是呈现这些画的纸,你可以利用很多线程生成多张图,但默认图只有一张。

tf.Graph().as_default()  表示将这个类实例,也就是新生成的图作为整个 tensorflow 运行环境的默认图,如果只有一个主线程不写也没有关系, TensorFlow 里面已经存好了一张默认图,可以使用 tf.get_default_graph() 来调用(显示这张默认纸),当你有多个线程就可以创造多个 tf.Graph() ,就是你可以有一个画图本,有很多张图纸,这时候就会有一个默认图的概念。

当只有一个线程时写不写都不重要,但写上确实一个良好的习惯,也是代码比较规范。正如下面这段话所解释的那样。

Since a default graph is always registered, every op and variable is placed into the default graph. The statement, however, creates a new graph and places everything (declared inside its scope) into this graph. If the graph is the only graph, it's useless. But it's a good practice because if you start to work with many graphs it's easier to understand where ops and vars are placed. Since this statement costs you nothing, it's better to write it anyway.

Just to be sure that if you refactor the code in the future, the operations defined belong to the graph you choose initially.

2.  tf.device() 的使用


在 TensorFlow 中,模型可以在本地 CPU 和 GPU 中运行,用户可以使用 tf.device() 指定模型运行的设备。

一般情况下,如果安装的 TensorFlow 是 GPU 版本,而且电脑配置中有符合条件的显卡,默认模型在显卡中运行,并会有相应提示。

如果要切换成 CPU 运算,可调用 tf.device(device_name) 函数,其中 device_name 格式如 /cpu:0 其中的0表示设别号,TF不区分 CPU 设备,通常设置为0即可;但是会区分 GPU 设备, /gpu:0 和 /gpu:1 表示两张不同的显卡。

有时候,我们即使在 GPU 下跑模型,也会将部分 Tesnor 储存在内存里,因为可能 Tensor 太大了,显存放不下,放到更大的内存中来,这是常常通过人为指定 CPU 设备。尽管这种方法会减少显存的负担,但从内存把数据传输到显存是很慢的,需要考虑速度的问题。

with tf.device('/cpu:0'):
build_CNN() # 这时CNN的Tensor储存在内存中,而非显存里

3.  sys.path.append('../') 


当我们 import module 时,默认情况下 python 解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在 sys 模块的 path 参数中, sys.path 返回的是一个 list

当我们要添加自己的搜索目录时,可以通过列表的 append() 方法 sys.path.append('../') 添加到列表末尾或者 insert() 方法 sys.path.insert(position, '../') 添加到指定位置

 >>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/dist-packages/apex-0.1-py2.7-linux-x86_64.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
>>> sys.path.append('../')
>>> sys.path
['', '/usr/local/lib/python2.7/dist-packages/apex-0.1-py2.7-linux-x86_64.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '../']

这种方法是在程序运行时对搜索路径进行临时修改,脚本运行结束后失效。

如果想要改路径一直有效,需要把路径添加到系统环境变量中。有以下几种方法:

1. 将写好的py文件放到已经添加到环境变量的目录下

2. 使用环境变量PYTHONPATH修改默认搜索路径 export PYTHONPATH=$PYTHONPATH:/home/liu/shell/config

3. /usr/lib/python2.7/site-packages下新建一个.pth 文件(以 pth 作为后缀) ,将需要导入的模块的路径分行书写,如:

 /home/cv/mvsnet/tools
/home/cv/mvsnet/cnn_warpper

4.  tf.app.flags.DEFINE_string() 


tf.app.flags.DEFINE_xxx() 的作用就是添加命令行的X tf.app.flags.DEFINE_xxx() ,而 tf.app.flags.FLAGS 可以从对应的命令行参数中取出参数。

 tf.app.flags.DEFINE_string('model_dir', './checkpoint', """Path to save the model.""")
tf.app.flags.DEFINE_boolean('use_pretrain', False, """Whether to train.""")
tf.app.flags.DEFINE_integer('ckpt_step', 0, """ckpt step.""")

上述代码的功能是创建几个命令行参数,其中第三个参数是对无输入时相应参数的提示信息。

当运行 tf.app.run() 时,可以利用 tf.app.flags 非常方便地将这些变量在线程之间传输

5.  GPU run out of memory 


-- ::59.515839: I tensorflow/core/kernels/cuda_solvers.cc:] Creating CudaSolver handles for stream 0x5a7a07e0

-- ::00.676787: W tensorflow/core/common_runtime/bfc_allocator.cc:] Allocator (GPU_0_bfc) ran out of memory trying to allocate .62MiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.

-- ::00.682241: W tensorflow/core/common_runtime/bfc_allocator.cc:] Allocator (GPU_0_bfc) ran out of memory trying to allocate .50MiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.

未完待续……

【学习笔记】TensorFlow的更多相关文章

  1. TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...

  2. tensorflow学习笔记----tensorflow在windows的安装及TensorBoard中mnist样例

    前言:                                                                                                 ...

  3. [学习笔记] TensorFlow 入门之基本使用

    整体介绍 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...

  4. Tensorflow学习笔记2:About Session, Graph, Operation and Tensor

    简介 上一篇笔记:Tensorflow学习笔记1:Get Started 我们谈到Tensorflow是基于图(Graph)的计算系统.而图的节点则是由操作(Operation)来构成的,而图的各个节 ...

  5. Google TensorFlow深度学习笔记

    Google Deep Learning Notes Google 深度学习笔记 由于谷歌机器学习教程更新太慢,所以一边学习Deep Learning教程,经常总结是个好习惯,笔记目录奉上. Gith ...

  6. Tensorflow学习笔记2019.01.22

    tensorflow学习笔记2 edit by Strangewx 2019.01.04 4.1 机器学习基础 4.1.1 一般结构: 初始化模型参数:通常随机赋值,简单模型赋值0 训练数据:一般打乱 ...

  7. Tensorflow学习笔记2019.01.03

    tensorflow学习笔记: 3.2 Tensorflow中定义数据流图 张量知识矩阵的一个超集. 超集:如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S ...

  8. 【转载】TensorFlow学习笔记:共享变量

    原文链接:http://jermmy.xyz/2017/08/25/2017-8-25-learn-tensorflow-shared-variables/ 本文是根据 TensorFlow 官方教程 ...

  9. TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]

    I optimizer.minimize(loss, var_list) 我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自 ...

  10. TensorFlow学习笔记:共享变量

    本文是根据 TensorFlow 官方教程翻译总结的学习笔记,主要介绍了在 TensorFlow 中如何共享参数变量. 教程中首先引入共享变量的应用场景,紧接着用一个例子介绍如何实现共享变量(主要涉及 ...

随机推荐

  1. Django学习之八:forms组件【对form舒心了】

    目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ...

  2. 《JavaScript高级程序设计》笔记:函数表达式(七)

    递归 function factorial(num){ if(num<=1){ return 1; }else { return num * arguments.callee(num-1); } ...

  3. Doctype的作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义?

    Doctype作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义? 1.1 Doctype作用 <!DOCTYPE>声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该 ...

  4. 森林防火应急指挥GIS系统森林防火监测预警系统

    森林防火监测预警与应急管理三维系统含日常业务管理.物资设备管理.火情定位.火情短信平台.应急预案管理.辅助决策等功能模块.该平台可便捷集成手机等移动端,可实时查看现场视频图像.定位火场人员,实现可视化 ...

  5. MySQL 基础知识梳理学习(七)----sync_binlog

    一般在生产环境中,很少用MySQL单实例来支撑业务,大部分的MySQL应用都是采用搭建集群的方法.搭建MySQL集群,可以进行数据库层面的读写分离.负载均衡或数据备份.基于MySQL原生的Replic ...

  6. 我喜欢的vs code快捷键for mac

    mac上的快捷键,尽量是像我用vs studio上靠近. cmd+K+S: 显示快捷键列 cmd+shift+p: 系统配置命令行 cmd+p:项目中文件列表,选择文件 cmd+shift+o:当前文 ...

  7. Win7环境 搭建IIS环境。发布asp.net MVC项目到IIS(第二期)

    在IIS环境中给发布项目修改域名,192.168.1.1:8081  ---->> www.preject.com 一.在网站主页中,1找到绑定网站.2编辑. 二.修改网站配置参数. 三. ...

  8. 做优化的数据库工程师请参考!CynosDB的计算层设计优化揭秘

    本文由云+社区发表 本文作者:孙旭,腾讯数据库开发工程师,9年数据库内核开发经验:熟悉数据库查询处理,并发控制,日志以及存储系统:熟悉PostgreSQL(Greenplum,PGXC等).Terad ...

  9. 996.ICU 写给... 写给年轻的自己

    好久不"水"长文了,随着Github开源项目996.ICU (工作996,生病ICU) (本意是为了指出互联网等早9晚9每周工作6天的不良加班工作制风气不符合法律,是对程序员等技术 ...

  10. DVWA-XSS学习笔记

    DVWA-XSS XSS概念:由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击. XSS类型: 反射型XSS:只是简单地把 ...