TensorFlow深度学习框架学习笔记(1)
2017-04-17 21:30
429 查看
TensorFlow的计算模型、数据模型和运行模型
TensorFlow计算模型——计算图
计算图是TensorFlow中最基本的概念,TensorFlow中的所有计算都会被转化为计算图上的节点。Tensor就是张量。张量在这里可以简单地理解为多维数组(后续会有详细的解释)。Flow,顾名思义,就是“流”的 意思。TensorFolw是一个通过计算图的形式来表述计算的编程系统。
计算图:
节点——TensorFlow中的每个计算
边——计算间的依赖关系
计算图的使用
TensorFlow程序一般可以分为两个阶段。其一,定义计算图中所有计算;其二,执行计算。
在Python中一般会采用“import tensorflow as tf”的形式来载入TensorFolw。在这个过程中,TensorFolw会自动维护一个默认的计算图,可以通过tf.get_default_graph来调取当前默认的计算图。(注:TensorFlow中没有常量,而是作为一种永远输出固定值的运算)
计算图的作用:
可以用来隔离张量和计算;
提供了管理张量和计算的机制;
有效地整理TensorFlow程序中的资源。
TensorFlow数据模型——张量
张量是TensorFlow管理数据的形式。张量:
零阶张量:标量,也就是一个数;
一阶张量:向量;
n阶张量:n维数组。
张量中主要保存了三个属性:名字(name)、维度(shape)、类型(type)。
名字是一个张量的唯一标识符,它同样也给出了这个张量是如何计算出来的。张量的名字是通过“node:src_output”,node为节点的名称,src_output表示当前张量来自节点的第几个输出。
维度,这个属性描述了一个张量的维度信息。
类型,每一个张量会有一个唯一的类型。(参与运算的张量类型不匹配时会报错)
TensorFlow支持的14种不同的类型:实数(float32、float64)、整数(int8、int16、int32、int64、uint8)、布尔型(bool)、复数(complex64、complex128)。
张量的使用
对中间计算的引用;
获得计算结果,得到真实数字。
TensorFlow运行模型——会话
会话拥有并管理TensorFlow程序运行时的所有资源。当所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄露的问题。
TensorFlow中使用会话的模式:
其一,需要明确调用会话生成函数和关闭会话函数;
sess = tf.Session() sess.run(……) sess.close()其二,TensorFlow可以通过Python的上下文管理器来使用会话。(要将所有的计算放在with的内部)
with tf.Session() as sess: sess.run(……) #不需要再调用Session.close()函数来关闭对话 #当上下文推出时会话关闭和资源释放也自动完成了
类似于计算图,TensorFlow也有类似默认会话的机制,但TensorFlow不会自动生成默认的会话,而是需要手动设置。在默认会话被指定后可以通过tf.Tensor.eval函数来计算一个张量的取值。
seee = tf.Session() with sess.as_default(): print(result.eval())TensorFlow提供了一种在交互式环境下直接构建默认会话的函数。tf.InteractiveSession,使用这个函数会将自动生成的会话注册为默认会话。
sess = tf.InteractiveSession() print(result.eval()) sess.close()
无论使用哪种方法都可以通过ConfigProto Protocol Buffer来配置需要生成的会话。下面给出了通过ConfigProto配置会话的方法:
config = tf.ConfigProto(allow_soft_placement 4000 = True, log_device_placement = True) sess1 = tf.InteractivesSession(config = config) sess2 = tf.Session(config = config)
通过ConfigProto可以配置的参数有:并行线程数、GPU分配策略、运算超时时间等。其中常用的参数有两个:
第一个是allow_soft_placement,布尔型。改参数默认值为False,但是有时为了使得代码的可移植性更强,在有在GPU的环境下,一般可以设置为True。其取值为True时,以下任一条件成立时,GPU上的运算可以放到CPU上进行:
1.运算无法在GPU上执行;
2.没有GPU资源(例如,运算被指定在第二个GPU上运行,但是机器只有一个GPU);
3.运算输入包含对CPU计算结果的引用。
第二个是log_device_placement,布尔型。当其取值为True时,日志中会记录每个节点被安排在了哪个设备上,以便于调试。(在实际生产环境中,将这个参数设置为False可以减少日志量。)
相关文章推荐
- 深度学习笔记——深度学习框架TensorFlow(十二)
- 深度学习笔记——深度学习框架TensorFlow(二)
- 深度学习笔记——深度学习框架TensorFlow(八)[Logging and Monitoring Basics with tf.contrib.learn]
- 深度学习笔记——深度学习框架TensorFlow之DNN深度神经网络的实现(十四)
- 深度学习笔记——深度学习框架TensorFlow(十)[Creating Estimators in tf.contrib.learn]
- TensorFlow-实战Google深度学习框架 笔记(上)
- 深度学习笔记——深度学习框架TensorFlow(一)
- 深度学习笔记——深度学习框架TensorFlow(十一)
- 深度学习笔记——深度学习框架TensorFlow之MLP(十四)
- Tensorflow 实战 google 深度学习框架 笔记(一)滑动模型
- 深度学习笔记——深度学习框架TensorFlow(五)[TensorFlow大规模线性模型教程]
- 深度学习框架谷歌TensorFlow学习笔记一
- 深度学习框架的比较(MXNet, Caffe, TensorFlow, Torch, Theano)
- TensorFlow 深度学习笔记
- 深度学习框架 Torch 7 问题笔记
- 深度学习框架TensorFlow 官方文档中文版
- TensorFlow深度学习笔记 Tensorboard入门
- 深度学习框架的比较(MXNet, Caffe, TensorFlow, Torch, Theano)
- TensorFlow 深度学习笔记 卷积神经网络
- 1.深度学习框架——TensorFlow的安装与入门