前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TF入门01-Graph&Session

TF入门01-Graph&Session

作者头像
公众号-不为谁写的歌
发布2022-04-14 08:29:21
7880
发布2022-04-14 08:29:21
举报
文章被收录于专栏:桃花源记

这个系列主要是对TensorFlow进行学习,了解其内部机制、运行方法,最后能根据自己的想法构建模型。

本文主要的介绍内容是TensorFlow的Graph和Session两个概念,即运算图和会话。

1. 数据流图

TensorFlow哲学:将计算图的定义和执行分离。

阶段一:运算图的定义

阶段二:使用session会话执行运算图的操作

2. 什么是Tensor?

Tensor是一个n维的数组

  • 0-d tensor:标量,或者说数字
  • 1-d tensor:向量
  • 2-d tensor:矩阵

让我们看一个简单的计算图

在TensorBoard的模型可视化结果中,结点通常表示操作、变量以及常量;边表示张量tensors。

这些tensor表示的是数据,TensorFlow = tensor + flow = data + flow.

从上面图中我们可以知道,直接打印a并不能得到真正的计算结果8,这也证实了TensorFlow计算图和执行过程确实是分离的

那么,我们如何才能得到计算结果a的值呢?

创建一个Session会话:在会话中可以执行运算图,从而得到a的计算结果值(8)。具体方法就是:

代码语言:javascript
复制
import tensorflow as tf
a = tf.add(3, 5)
sess = tf.Session()
print(sess.run(a))         >> 8
sess.close()

也可以换种写法:

代码语言:javascript
复制
import tensorflow as tf
a = tf.add(3, 5)
with tf.Session() as sess:
    print(sess.run(a))

接下来,我们来看一下tf.Session()这个函数。

3. tf.Session()

tf的Session对象封装了TF的执行环境,在环境中可以执行各种操作以及计算各种张量。此外,Session会话还将分配内存以存储变量的当前值

4. 更复杂的运算图

这个运算图完成的计算为:(x*y)^{x+y}

让我们在看一个更复杂的图:

在这个图中又定义了一个useless操作,但是我们希望执行的计算是z。在TF运行时,pow_op结点的计算过程并不依赖于useless,因此,会话sess在执行过程中不会执行useless的运算,这样就可以减少不必要的运算过程

那么,如果我们想要同时计算useless和pow_op,应该怎么做呢?

sess.run函数的API为:

fetches是一个列表,其中包含我们想要执行的计算。因此,我们可以在sess.run([])列表里添加pow_op, useless。

TensorFlow可以将运算图分解为几个块,然后在多个CPU,GPU,TPU或其他设备上并行运行它们。比如:

为了方便划分子块的并行计算,我们可以指定它们的执行设备,

5. 能不能创建多个运算图?

到目前为止,我们只有一个运算图,我们能不能创建多个运算图呢?答案是可以的,但是不推荐,理由如下:

  • 多个图需要多个会话,默认情况下每个会话都会尝试使用所有可用资源
  • 如果不通过python/numpy传递数据,就不能在多个运算图之间传递数据,而python/numpy在分布式环境中不起作用

我们可以自己创建运算图:

代码语言:javascript
复制
g = tf.Graph()

如果想要在默认图中进行操作,需要执行:

代码语言:javascript
复制
g = tf.get_default_graph()

6. TF为什么使用Graph?

  • 可以节省计算。TF可以根据输出只运算相关的操作图,避免执行不必要的运算
  • 将计算分解为小的微分块,以利于自动求导
  • 有利于分布式计算。可以将运算分布在CPU、GPU、TPU等设备上。将运算图分解为多个小块,然后将小块分散在不同的设备上,这样有利于分布式计算
  • 许多常见的机器学习模型已经被普遍地认为可以表示为有向图,这使得它们的实现对机器学习实践者来说更加自然。

7. References

CS 20: Tensorflow for Deep Learning Research

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 数据流图
  • 2. 什么是Tensor?
  • 3. tf.Session()
  • 4. 更复杂的运算图
  • 5. 能不能创建多个运算图?
  • 6. TF为什么使用Graph?
  • 7. References
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档