您的位置:首页 > 其它

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可减少日志量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: