TensorFlow 实战系列1---基本概念

 TensorFlow 的名字中已经说明了它最重要的两个概念——Tensor和Flow。Tensor 就是张量。在TensorFlow 中,所有的数据都通过张量的形式来表示。从功能的角度上看,张量可以被简单理解为多维数组。但张量在TensorFlow 中的实现并不是直接采用数组的形式,它只是对TensorFlow 中运算结果的引用。在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程。在上面给出的测试样例程序中,第一个print 输出的只是一个引用而不是计算结果。一个张量中主要保存了三个属性:名字(name)、维度(shape)和类型(type)。张量的第一个属性名字不仅是一个张量的唯一标识符,它同样也给出了这个张量是如何计算出来的。张量的命名是通过“node:src_output”的形式来给出。其中node 为计算节点的名称,src_output 表示当
前张量来自节点的第几个输出。比如张量“add:0”就说明了result 这个张量是计算节点“add”输出的第一个结果(编号从0 开始)。张量的第二个属性是张量的维度(shape)。这个属性描述了一个张量的维度信息。比如“shape(2,) ”说明了张量result是一个一维数组,这个数组的长度为2。张量的第三个属性是类型(type),每一个张量会有一个唯一的类型。TensorFlow 会对参与运算的所有张量进行类型的检查,当发现类型不匹配时会报错。如果说TensorFlow 的第一个词Tensor 表明了它的数据结构,那么Flow 则体现了它的计算模型。Flow 翻译成中文就是“流”,它直观地表达了张量之间通过计算相互转化的过程TensorFlow 是一个通过计算图的形式来表述计算的编程系统。TensorFlow 中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。图1 展示了通过TensorBoard 画出来的测试样例的计算图。 图1 中的每一个节点都是一个运算,而每一条边代表了计算之间的依 赖关系。如果一个运算的输入依赖于另一个 运算的输出,那么这两个运算有依赖关系。 在图1 中,a 和b 这两个常量不依赖任何其 他计算。而add 计算则依赖读取两个常量的 取值。于是在图1 中可以看到有一条从a 到 add 的边和一条从b 到add 的边。在图1 中, 没有任何计算依赖add 的结果,于是代表加 法的节点add 没有任何指向其他节点的边。所有TensorFlow 的程序都可 以通过类似图1 所示的计算图的形式来表示,这就是TensorFlow 的基本 计算模型。


TensorFlow 计算图定义完成后,我们需要通过会话(Session)来执行定义好的运算。会话拥有并管理TensorFlow 程序运行时的所有资源。当所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄漏的问题。TensorFlow 可以通过Python 的上下文管理器来使用会话。以下代码展示了如何使用这种模式。

# 创建一个会话,并通过Python中的上下文管理器来管理这个会话。
with tf.Session() as sess
# 使用这创建好的会话来计算关心的结果。
sess.run(...)
# 不需要再调用“Session.close()”函数来关闭会话,
# 当上下文退出时会话关闭和资源释放也自动完成了。

 通过Python 上下文管理器的机制,只要将所有的计算放在“with”的内部就可以。当上下文管理器退出时候会自动释放所有资源。这样既解决了因为异常退出时资源释放的问题,同时也解决了忘记调用Session.close 函数而产生的资源泄。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值