tensorflow学习笔记(2)——基础(二)——张量和会话

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()
  1. 使用上下文管理器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可减少日志量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值