TensorFlow 2 基础概念语法与常用模块

当然,如果你对 TensorFlow 1.x 本来就不熟悉,可能无法看明白这些升级的内容。不用担心,本次直接对 TensorFlow 2 进行学习,我们不再回首过去,直接展望未来。

接下来,我们将从 TensorFlow 基础概念语法入手,一步一步学习 TensorFlow 的使用。

建议先学习 Python 数值计算库 NumPy 的使用,能帮助你更清楚地理解 TensorFlow 2 中的一些函数用法和概念。

张量

=================================================================

介绍


张量,如果你第一次听说,一定会感觉到它是一个很厉害的东西吧。它的确很厉害,但是不难理解。

张量的概念贯穿于物理学和数学中,如果你去看它的很多理论描述,可能并不那么浅显易懂。例如,下面有两种关于 张量的定义

  • 通常定义张量的物理学或传统数学方法,是把张量看成一个多维数组,当变换坐标或变换基底时,其分量会按照一定规则进行变换,这些规则有两种:即协变或逆变转换

  • 通常现代数学中的方法,是把张量定义成某个矢量空间或其对偶空间上的多重线性映射,这矢量空间在需要引入基底之前不固定任何坐标系统。例如协变矢量,可以描述为 1-形式,或者作为逆变矢量的对偶空间的元素

上面的定义不知道你看懂了没有?估计会有点困难。下面,我们进行通俗易懂的说明:

首先,你应该知道什么是向量和矩阵。先前的介绍中,我们把 1 维的数组称之为向量2维的数组称之为矩阵。那么,现在告诉你张量其实代表着更大的范围,你也可以把其看作是 N 维数组

所以,如果现在重新描述向量和矩阵,就可以是:

一阶张量为向量,二阶张量为矩阵。当然,零阶张量也就是标量,而更重要的是 N 阶张量,也就是 N 维数组。

| 阶 | 数学实例 |

| :-: | :-: |

| 0 | 标量(只有大小) |

| 1 | 矢量(大小和方向) |

| 2 | 矩阵(数据表) |

| 3 | 3 阶张量(数据立体) |

| N | N 阶张量(自行想象) |

image-20211012140051313

所以,张量并不是什么晦涩难懂的概念。如果不严谨的讲,张量就是 N 维数组。前面提到的向量、矩阵,也是张量

TensorFlow 中对张量的定义


你即将了解到的大多数深度学习框架都会使用张量的概念,这样做的好处是统一对数据的定义NumPy 中,数据都使用 Ndarray 多维数组进行定义TensorFlow 中,数据都会用张量进行表述。

下面就来了解 TensorFlow 中对张量的定义。

在 TensorFlow 中,每一个 Tensor 都具备两个基础属性

  • 数据类型(默认:float32)

  • 形状

其中,数据类型大致如下表所示:

| Tensor 类型 | 描述 |

| :-: | :-: |

| tf.float32 | 32 位浮点数 |

| tf.float64 | 64 位浮点数 |

| tf.int64 | 64 位有符号整型 |

| tf.int32 | 32 位有符号整型 |

| tf.int16 | 16 位有符号整型 |

| tf.int8 | 8 位有符号整型 |

| tf.uint8 | 8 位无符号整型 |

| tf.string | 可变长度的字节数组 |

| tf.bool | 布尔型 |

| tf.complex64 | 实数和虚数 |

另外,TensorFlow 通过三种符号约定来描述张量维度:阶,形状和维数

三者之间的关系如下:

| 形状 | 阶 | 维数 | 示例 |

| :-: | :-: | :-: | :-: |

| [] | 0 | 0-D | 0 维张量。标量。 |

| [D0] | 1 | 1-D | 形状为 [5] 的 1 维张量。 |

| [D0, D1] | 2 | 2-D | 形状为 [3, 4] 的 2 维张量。 |

| [D0, D1, D2] | 3 | 3-D | 形状为 [1, 4, 3] 的 3 维张量。 |

| [D0, D1, … Dn-1] | n | n-D | 形状为 [D0, D1, … Dn-1] 的张量。 |

值得注意的是,上表中的示例都是形容张量的形状。例如 [3, 4] 指的张量的形状为 [3, 4],而不是张量 [3, 4]

张量的类型


根据不同的用途,TensorFlow 中主要有 2 种张量类型,分别是:

  • tf.Variable变量 Tensor,需要指定初始值,常用于定义可变参数例如神经网络的权重

  • tf.constant常量 Tensor,需要指定初始值,定义不变化的张量

我们可以通过传入列表NumPy 数组来新建变量和常量类型的张量

(1)查看 TensorFlow 版本:

image-20211012144331702

(2)定义形状为 (3, 3) 的二维变量:

image-20211012144504564

(3)定义现状为 (2,2) 二维常量

image-20211012144612426

张量的属性


仔细观察,你会发现输出包含了张量的 3 部分属性,分别是

  • 形状 shape

  • 数据类型 dtype

  • 对应的 NumPy 数组。

你还可以直接通过 .numpy() 输出张量的 NumPy 数组。

image-20211012143937499

特殊常量张量


上面我们已经介绍了常量张量,这里再列举几个经常会用到的新建特殊常量张量的方法:

  • tf.zeros:新建指定形状且全为 0 的常量 Tensor

  • tf.zeros_like:参考某种形状,新建全为 0 的常量 Tensor

  • tf.ones:新建指定形状且全为 1 的常量 Tensor

  • tf.ones_like:参考某种形状,新建全为 1 的常量 Tensor

  • tf.fill:新建一个指定形状且全为某个标量值的常量 Tensor

(1)3x3 全为 0 的常量 Tensor

image-20211012145035811

(2)c 形状一致全为 1 的常量 Tensor

image-20211012145125912

(3)2x3 全为 6 的常量 Tensor

image-20211012145446893

创建序列


除此之外,我们还可以创建一些序列,例如:

  • tf.linspace:创建一个等间隔序列。

  • tf.range:创建一个数字序列。

image-20211012145924371

image-20211012150204359

实际上,如果你熟悉 NumPy 的话,你会发现这与 NumPy 中创建各式各样的多维数组方法大同小异。数据类型是一切的基础,了解完张量我们就可以继续学习张量的运算了。

Eager Execution


TensorFlow 2 带来的最大改变之一是将 1.x 的 Graph Execution(图与会话机制)更改为 Eager Execution(动态图机制)。在 1.x 版本中,低级别 TensorFlow API 首先需要定义数据流图,然后再创建 TensorFlow 会话,这一点在 2.0 中被完全舍弃。

TensorFlow 2 中的 Eager Execution 是一种命令式编程环境,可立即评估操作,无需构建图

所以说,TensorFlow 的张量运算过程可以像 NumPy 一样直观且自然了。接下来,我们以最简单的加法运算为例:

image-20211012150330470

如果你接触过 1.x 版本的 TensorFlow,你要知道一个加法运算过程十分复杂。我们需要初始化全局变量 → 建立会话 → 执行计算,最终才能打印出张量的运算结果。

init_op = tf.global_variables_initializer() # 初始化全局变量

with tf.Session() as sess: # 启动会话

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
…(img-bOFK08p7-1715621245439)]

[外链图片转存中…(img-j5ryQnVd-1715621245439)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值