tensorflow学习笔记(2)——基础(二)——张量和会话
2017-07-12 21:10
239 查看
tensorflow学习笔记(2)
3张量flow
1概念
数据用张量的形式来表示,功能上看,张量可以理解为多维数组,第n阶张量就上一个n维数组,但实现不是数组形式,只是对TF中计算结果的引用,其中没有真正保存数字,而是如何得到这些数字的计算过程。import tensorflow as tf #tf.constant是一个计算,其结果为一个张量,保存在变量a中 a = tf.constant([1.0, 2.0], name="a") b = tf.constant([2.0, 3.0], name="b") result = a+b # result = tf.add(a, b, name="add") #两行代码效果一样 print (result) ''' 输出: Tensor("add:0", shape=(2,), dtype=float32) '''
TF的计算结果不是一个具体数字而是一个张量的结构,一个张量中保存了3个属性:name, shape, type
1. name不仅是一个张量的唯一标识符,也给出了这个张量如何计算出来,计算图上每个节点代表一个计算,其命名可以通过node:src_ouput形式给出,其中node为节点名称,src_ouput表示当前向量来自节点的第几个输出。
2. shape描述了张量的维度信息,上面的
shape=(2, )表示result是一个一维数组其长度为2。
3. type描述了张量的唯一类型,TF会进行类型检查。TF支持14种类型:
实数(tf.float32, tf.float64)
整数(tf.int8, tf.int16, tf.int64, tf.uint8)
布尔型(tf.bool)
复数(tf.comlex64, tf.complex128)
2使用
两大类用途1. 对中间计算结果的引用,提高代码可读性
2. 获得计算结果(使用session得到具体数字,
tf.Session().run(result))
集合(collection)可管理不同类别的资源。
几个常用的自动维护的集合:
集合名称 | 集合内容 | 使用场景 |
---|---|---|
tf.GraphKeys.VARIABLES | 所有变量 | 持久化Tensorflow模型 |
tf.GraphKeys.TRAINABLE_VARIABLES | 可学习的变量(神经网络中参数) | 模型训练、生成模型可视化内容 |
tf.GraphKeys.SUMMARIES | 日志生成相关的张量 | TF计算可视化 |
tf.GraphKeys.QUEUE_RUNNERS | 处理输入的QueueRunner | 输入处理 |
tf.GraphKeys.MOVING_AVERAGE_VARIABLES | 所有计算了滑动平均值的变量 | 计算变量的滑动平均值 |
4运行模型-会话session
计算图和张量组织数据和运算,会话用来执行定义好的运算,session拥有并管理TF程序运行时的所有资源,所有计算完成后需要关闭会话来帮助系统回收资源。使用会话模式有两种1. 显式调用会话生成函数和关闭会话函数
#创建一个会话 sess = tf.Session() sess.run(...) #关闭会话,释放本次运行中使用的资源 sess.close()
使用上下文管理器with
#创建一个会话并通过上下文管理器管理这个会话 with tf.Session() as sess: sess.run() #不需要再调用“Session.close()”来关闭会话,当上下文退出时就自动完成了
TF不会生成默认会话,需要手动指定。默认对话指定后可以通过tf.Tensor.eval来计算一个张量的取值。如下:
sess = tf.Session() with sess.as_defalut(): print(result.eval())
下面的代码实现同样功能
sess = tf.Session() #下面两个命令功能相同 print(sess.run(result)) print(result.eval(session=sess))
在交互式环境下使用tf.InteractiveSession省去将产生的会话注册为默认会话的过程,可以自动将生成的会话注册为默认会话。
两种方法都可以使用ConfigProto Protocol Buffer来配置需要生成的会话。方法如下:
config = tf.ConfigProto(allow_soft_placement=True, log_device_placement=True) sess1 = tf.InteractiveSession(config=config) sess2 = tf.Session(config=config)
来配置类似并行的线程数、GPU分配策略、运算超时时间等参数。最常用2个布尔型参数:
allow_soft_placement, 为True时,三个条件成立任意一个,GPU上的运算可以放到CPU:
1. 运算无法在GPU上执行
2. 无GPU资源
3. 运算输入包含对CPU计算结果的引用
log_device_placement, 为True时,日志中将会记录每个节点被安排在了哪个设备上以方便调试。设为False可减少日志量。
相关文章推荐
- TensorFlow计算图,张量,会话基础知识
- tensorflow基础(三)——张量和会话
- 在 ASP.NET 中实现会话状态的基础
- 精通EJB(3) 无状态会话bean基础
- ASP.NET中实现会话状态的基础
- 在ASP.NET中实现会话状态基础
- (31)会话与状态管理基础知识
- [PHP+MySQL开发基础分享]关于PHP会话和网页中文乱码的问题
- 在asp.net中实现会话状态基础
- php 安全基础 第四章 会话与 Cookies
- php 安全基础 第八章 共享主机 会话数据暴露
- 精通EJB(4) 状态会话Bean基础
- 在ASP.NET中实现会话状态基础(2)
- 在 ASP.NET 中实现会话状态的基础
- 在 ASP.NET 中实现会话状态的基础
- 在ASP.NET中实现会话状态基础(1)
- 在 ASP.NET 中实现会话状态的基础
- 在ASP.NET中实现会话状态基础(3)
- 在asp.net中实现会话状态基础
- ASP.NET 中实现会话状态的基础