Tensorflow基础

来源:互联网 发布:js onclick this 编辑:程序博客网 时间:2024/06/02 05:26

Tensorflow基础

要利用好深度学习所带来的福利,选择一款好的深度学习工具必不可少。在谷歌内部,Tensorflow已经被成功应用到语音搜索、广告、电商、图片、街景图、翻译、YouTube等众多产品之中。基于Tensorflow开发的RankBrain排序算法在谷歌上千种排序算法中排在第三重要的位置。对比不同开源深度学习工具的社区活跃度,Tensorflow远远超过其他工具。
Tensorflow的三个基本概念:

  • 计算图(tf.Graph)
  • 张量(tf.Tensor)
  • 会话(tf.Session)

TensorFlow 计算模型—计算图

Tensorflow 中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。Tensorflow程序一般可以分为两个阶段:

  • 第一阶段需要定义计算图中所有的计算
  • 第二阶段为执行计算

以下代码给出了计算定义阶段的样例:

import tensorflow as tfa = tf.constant([1, 2], name="a", dtype=tf.float32)b = tf.constant([2.0, 3.0], name="b")result = a+b

在这个过程中,Tensorflow会自动将定义的计算转化为计算图上的节点。

Tensorflow 数据模型—张量

张量是Tensorflow管理数据的形式,所有的数据都通过张量的形式来表示。张量在Tensorflow中的实现并不是直接采用数组的形式,它只是对Tensorflow中运行结果的引用
在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程。以向量加法为例:

import tensorflow as tfa = tf.constant([1.0, 2.0], name="a")b = tf.constant([2.0, 3.0], name="b")result = tf.add(a, b, name="add")print(result)

结果为:

Tensor("add:0", shape=(2,), dtype=float32)

从上面代码的运行结果可以看出,一个张量中主要保存了三个属性:名字(name)、维度(shape)、类型(type)

  • name:张量的唯一标识符,同时给出了这个张量如果计算出来的。name的形式:“node:src_output”,其中node为节点的名称,src_output表示当前张量来自节点的第几个输出。
  • shape:描述了一个张量的维度信息。
  • type:每一个张量会有一个唯一的类型。Tensorflow会对参与运算的所有张量进行类型的检查,当发现类型不匹配时会报错。如果不指定类型,Tensorflow会给出默认的类型,比如不带小数点的数会被默认为int32,带小数点的会默认为float32。因为使用默认类型有可能导致潜在的类型不匹配,所以一般建议通过指定dtype来明确指出变量或常量的类型。

张量的使用:
- 对中间计算结果的引用;
- 当计算图构造完成之后,张量可以用来获得计算结果。

Tensorflow 运行模型—会话

Tensorflow 使用会话(Session)来执行定义好的运算。会话拥有并管理Tensorflow程序运行时的所有资源。当所有计算完成之后,需要关闭会话来帮助系统回收资源,否则就可能出现资源泄漏的问题。
Tensorflow中使用会话的模式一般有两种:

  • 明确调用会话生成函数和关闭会话函数:
sess = tf.Session()sess.run(...)sess.close()

然而,当程序因为异常而退出时,关闭会话的函数可能就不会被执行从而导致资源的泄漏。

  • 通过python上下文管理器来使用会话:
with tf.Session() as sess:    sess.run()

当上下文退出时,会话关闭和资源释放也自动完成了。

原创粉丝点击