TensorFlow 概览

Grotta Palazzese 帕拉泽塞岩洞餐厅-波利尼亚诺

TensorFlow 本质上是一个大规模的运算框架,它的运算被抽象成一张运算矢量图。就像在这边看到一张运算图一样,上面的节点代表运算或者状态。当我们完成了一些运算或者结束了一些状态的时候,我们的数据就从一个节点流到另外一个节点。

TensorFlow 计算图

在 TensorFlow 中:

由图 (Graph) 表示计算任务,

图 (Graph) 中的节点 (node) 称之为 op (operation),节点一般执行某种抽象运算

图 (Graph) 中的边 (或线) (edge) 表示节点 op 输入/输出的数据流,数据流以张量 (tensor) 表示

通过变量 (Variable) 维护状态

使用 feed 和 fetch 为任意的操作 (arbitrary operation) 赋值或从中获取数据

TensorFlow是一种典型的基于符号编程的数值计算框架,从总架构上分为两层:

  1. 前端:负责计算图的构造,支持多语言,其中Python提供的 API最为成熟;
  2. 后端:负责计算图的执行,使用C++实现,直接操作分布式的CPU/GPU环境。

TensorFlow 的程序的运作过程也是包含两部分:

  1. 构建一个包含 tf.Tensor 对象的图,这个图详细的描述了每一个 Tensor 是怎样基于其它可得到的 Tensor 去计算的。
  2. 通过 Session 去启动图,运行部分子图去得到一个期望的结果。

Tensor 是向量、矩阵或者更高维度的代名词。在内部,Tensor 是 TensorFlow 的基本数据类型,代表 n 维数组。Tensor 代表了部分定义的极端,并最终产生一个值。

A tf.Tensor object represents aparticily defined computation that will eventually produce a value.

tf.Tensor 和 numpy 的 ndarray 很像。

Tensor 是同一种 datatype 的 n 维数组。Tensor 的数据类型可以是 float32、int32 或者是 string (string 可以说是 TF 的基本数据类型,可以是 Tensor 的单个数据元素)。虽然一个 Tensor 只有一种 datatype,但是可以将任何数据类型序列化为 string,并且存储到 tf.Tensor 中。使用 tf.case 可以将 tf.Tensor 从一种数据类型转换为另一种数据类型。从 Python 对象来创建 tf.Tensor 时,应该指定一个数据类型,虽然这是一个可选的,但是如果没有指定, TensorFlow 将自动进行类型转换,Python 中的 integer 转换成 tf.int32,float point number 转换成 tf.float32,其他转换与 numpy 的转换规则相同。

Tensor 也有秩 (rank)

Rank Math entity
0 Scalar (magnitude only)
1 Vector (magnitude and direction)
2 Matrix (table of numbers)
3 3-Tensor (cube of numbers)
n n-Tensor (you get the idea)

Tensor 也有 shape 属性,返回一个 TensorShape 对象,shape 可以用 Python 中的列表或者元组表示。如果输入的 Tensor 的 shape 是已知的,那么 op 也会产生一个已知 shape 的 Tensor ,但是在某些情况下,只能在 Graph 执行的时候才可以获知 Tensor 的 shape。使用tf.shape可以在 runtime 的时候动态的注入一个 tf.Tensor 依靠其 shape 来操纵一个 Tensor shape,从而获得一个指定 shape 的 Tensor。tf.Tensor 有 size 的概念,但是没有 size 属性,tf.Tensor 的 shape 可以通过 tf.reshape来动态的改变。

关于 切片 没有找到更多详细介绍,应该不会出现太大变化。

一些特殊类型的 Tensor :

  • tf.Variable
  • tf.Constant
  • tf.Planceholder
  • tf.SparseTensor

除了 tf.Variable 之外,其他 3 个 Tensor 的值是不变的 (immutable)。

With the exception of tf.Variable, the value of a tensor is immutable, which means that in the context of a single execution tensors only have a single value. However, evaluating the same tensor twice can return different values; for example that tensor can be the result of reading data from disk, or generating a random number.

Tensor-like objects:

  • tf.Tensor
  • tf.Variable
  • numpy.ndarry
  • list (and lists of tensor-like objects)
  • Scalar python types: bool float int str

tensor-like objects 在需要时均会隐式调用 tf.convert_to_tensor 方法,每一次调用就会生成一个新的 Tensor ,为了防止多次重复调用同一个 tensor-like object ,导致内存不足,应该手动显示调用该方法,而在之后均使用其生成的 Tensor。

Print Tensor

  • print (Tensor)

    很少使用,这种方法只会打印一个象征,没有实际值。

  • tf.Print(t, [t])

    打印第二个参数中的 Tensor 集,返回第一个参数的 Tensor。返回的Tensor 必须被使用,只有这样,才会有打印输出,否则该语句什么也不执行。因为图的执行,只执行依赖的子图。

Evaluate a Tensor

Tensor.eval() 这个方法仅在一个默认的会话 (Session) 是启动的时候工作,返回一个和 Tensor有相同 context 的 numpy 数组。

在 Python 中,op构造器的返回值代表该 op 的输出。

tf.constant(42.0) 代表创建了一个 op 添加到默认图中,并返回一个 tf.Tensor。

tf.Graph 对它所包含的 op 定义了一个 namespace ,TensorFlow 会自动的为其添加一个独一无二的 name ,但是也提供了两种方式去重写 op 的 name。

  • name 参数

    tf.constant(42.0, name="answer") 该语句创建了一个 answer 的 op ,并且返回了一个 “answer:0”(0 只代表产生序列)的 Tensor。如果已经存在 answer 的 op ,TensorFlow 将会改为 "answer_1""answer_2"来使其 name 是独一无二的。

  • tf.name_scope 函数

    为 op 指定 namespace ,添加一个以 namespace 前缀以/分割。

启动图

  1. tf.Session() 创建 Session 对象,如果没有任何参数将会启动默认默认图。
  2. tf.Session.run([], options, run_metadata)运行图,后面两个是可选参数,第一个列表是 fetch 的 Tensor 列表。
  3. tf.Session.close(),关闭会话释放资源。对于这个可以使用 with代码块,自动关闭会话。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容