机器人与人工智能爱好者论坛

 找回密码
 立即注册
查看: 16744|回复: 1
打印 上一主题 下一主题

Tensorflow中几个基本概念的理解

[复制链接]

285

主题

451

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
13746
跳转到指定楼层
楼主
发表于 2015-12-22 04:00:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Tensorflow中几个基本概念的理解
作者:morinson  来源:FGM学习小组


一、环境介绍:
宿主机:win7 64位
虚拟机软件:vmware workstation 12
虚拟机:Ubuntu 14.0.4.1
Python:2.7
Tensorflow:CUP版,tensorflow-0.5.0-cp27-none-linux_x86_64.whl
为了环境干净,使用virtualenv 创建一个隔离的容器, 来安装 TensorFlow.所以每次使用前,都先进行source,切入到容器环境
morinson@ubuntu14041:~$ cd tensorflow/
morinson@ubuntu14041:~/tensorflow$ source bin/activate
(tensorflow)morinson@ubuntu14041:~/tensorflow$
(tensorflow)morinson@ubuntu14041:~/tensorflow$
提示符中成功出现上面红色标志就代表成功切换到容器环境里的tensorflow,当然,如果你是在系统中直接部署的tensorflow,那么就可以跳过这一步

二、演示和分享的几个概念
这篇笔记里谈谈tensorflow官方文档 第一章.起步 中讲到的图 (graph)、op (operation 的缩写)、会话 (Session)、tensor这些基本概念的理解和实验。仅供参考,不对之处请同学们多多指正。

1, 图 (graph)
在官方文档中,google是这样描述的“使用图 (graph) 来表示计算任务”,看起来简单明了,但是刚刚接触tensorflow的同学反而容易迷糊,主要就是因为google使用了“图(graph)”这个字眼。难道tensorflow只能处理图片?真像肯定不是这样,其实tensorflow和开发语言(比如python)配合起来可以处理复杂的常规程序逻辑、高效的超大规模数学计算(在计算机世界里,一切都是数字)、以及调用大量封装好了的算法、当然你也可以编写自己的算法,或者对现有算法进行完善。最主要是google起的这个名字比较坑,要是直接就叫“计算任务”或者“任务”,估计同学们也就不会迷糊了吧。但既然人家是东家,咱们只是使用者,所以只能随着人家的叫法来了。

2, op (operation 的缩写)
既然有了任务,那么为了完成任务,总是要一步步做的吧。在tensorflow中,这个实现任务的每一步,比如赋个值啦、让谁和谁乘一下啦、谁对谁求个导啦、等等,都是一个个步骤,google给它们也起了个名字,这个名字不坑人,叫op (operation 的缩写)。

3, 会话 (Session)
在说这个概念之前,我们先来看一个列子,下面这段代码大家都很熟悉吧,tensorflow的helloworld,肯定是你装好tensorflow后敲的第一段代码。同学们都懂的。

  1. $ python                                                                              #进入python语言环境,出现>>>即代表进入了
  2. >>> import tensorflow as tf                                                     #1,声明引用tensorflow,在后面的代码中以tf来使用tensorflow的所有功能
  3. >>> hello = tf.constant('Hello, TensorFlow!')                       #2,创建一个变量hello,其值是tf的一个op结果
  4. >>> sess = tf.Session()                                                          #3,创建一个变量sess,其是tf的一个Session实例
  5. >>> print sess.run(hello)                                                      #4,调用Session对象的run方法对hello这个op进行处理,然后将结果返回给print打印
  6. Hello, TensorFlow!
  7. >>> a = tf.constant(10)                                                      #5, 创建一个变量a,其值是tf的一个op结果
  8. >>> b = tf.constant(32)                                                    #6, 创建一个变量b,其值是tf的一个op结果
  9. >>> print sess.run(a+b)                                                     #7, 调用Session对象的run方法对a这个op和b这个op进行加法处理,然后将结果返回给print打印
  10. 42
  11. >>>
复制代码

为了方便描述,我给上面代码都追加了注释。同时,我在下面给出两次执行的真实过程截屏
第一次执行:与示例代码一模一样


第二次执行:我增加了4条打印语句


你会惊奇的发现,这个与我们常规的程序语言不一样啊!为什么我明明给hello、a、b赋了值,但是打印时都只是一个类型说明,并没有具体值?现在我们来看看官方文档中的一段话“
TensorFlow程序通常被组织成一个构建阶段, 和一个执行阶段. 在构建阶段, op 的执行步骤被描述成一个图.在执行阶段, 使用会话执行图中的 op.”,至此真相大白,原来在tensorflow中,调用run方法时是执行阶段,其它是构建阶段,构建阶段你声明和定义的任何op操作只是被记下来了,但并没有落实,只有到了run时,tensorflow才真正的使用CPU执行这些op操作。别小瞧这个设计,这样基本上消除了一段代码内在tf和python之间的切换,会大大减小开支,提升计算效率。同时,将很多操作攒在一堆,也方便分布式执行。

那么问题来了,既然google为了效率这么非常规的设计了tensorflow的两阶段思路,它如何区分和识别这些阶段呢?所以就产生了会话 (Session),同时Session也就有了创建(#3那句)、使用(#4\#7那句)、关闭(正规应该有,用sess.close(),这里是简单例子,就直接退出python了)的过程。

其实会话 (Session)存在的意义就是为了区别执行阶段和构建阶段,因为常规开发语言中,每一行代码都是执行阶段。


4, Tensor
官方文档这样描述“使用 tensor 表示数据.”,讲的很明白了,就是google给常规的程序数据又起了个怪名字,“每个 Tensor 是一个类型化的多维数组.”、“一个 op获得 0 个或多个Tensor , 执行计算, 产生 0 个或多个Tensor .”


Tensorflow中几个基本概念的理解 by morinson 20151218.docx (55.73 KB, 下载次数: 9)

我是笨鸟,我先飞!
回复

使用道具 举报

2

主题

4

帖子

30

积分

注册会员

Rank: 2

积分
30
沙发
发表于 2015-12-22 17:25:19 | 只看该作者
有用!赞一个!LZ有心了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|陕ICP备15012670号-1    

GMT+8, 2024-5-16 12:34 , Processed in 0.061965 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表