Tensorflow2.0特性
相较于1.0,tensorflow2.0是一次重大革命性的改进,主要是以下几个方面。
(1)1.0 使用的是静态图机制,即分为构建阶段和部署阶段,构建阶段只描述了计算图,并没有实质的进行计算,而是在执行阶段中,在会话层进行统一的一次性计算,优点是高效节省资源,却没有中间结果,程序不够简洁,不宜调试。
2.0 默认使用的是动态图机制,可以立刻执行计算并返回结果,所以可以快速的建立和调试模型。但也可以指定静态图机制提高效率。2.0的方法是:兼顾易用性和执行效率,在程序调试阶段使用动态图,快速建立模型、调试程序;在部署阶段,采用静态图机制,从而提高模型的性能和部署能力。
(2)1.0有很多重复冗余的API,不利于程序共享,维护成本高。2.0 清理、整合了重复的API,将tf.keras作为构建和训练模型的标准高级API
(3)将 Eager Execution 作为默认执行模式。
张量
Tensorflow 中张量是由 Tensor 类实现,每个张量都是一个 Tensor 对象。
其实,张量就是多维数组,像是 python 自带的列表 list,numpy 中的数组对象 ndarray,他们都可以作为数据的载体,但他们之间也有一些区别:
python 中的列表(list):
- 元素可以使用不同的数据类型,可以嵌套
- 在内存中不连续存放,是一个动态的指针数组
- 读写效率低,占用内存空间大
- 没有shape属性,不适合做数值计算
numpy数组(ndarray):
- 专门为高维数据浮点运算而设计
- 数组内所有元素数据类型相同
- 每个元素在内存中占用的空间相同,存储在一个连续的内存区域中
- 存储空间小,读取和写入速度快在CPU中运算,不能够主动检测、利用GPU进行运算
Tensorflow张量(Tensor):
- 为实现大规模深度学习应用而产生
- 可以高速运行于GPU和TPU之上
- 支持CPU、嵌入式、单机多卡和多机多卡等多种计算环境
- 高速的实现神经网络和深度学习中的复杂算法
为了降低初学者的难度,TensorFlow的基本运算、参数命名、运算规则、API的设计等与NumPy非常相近,所以有了numpy 的基础,tensorflow是很容易入手的。
1、创建张量
下面对三种 value 参数:数字,python原生列表,numpy数组 分别给出详细说明。
(1)参数为 python 列表
其中,id是张量的序号,由系统自动按顺序给出。
numpy()
通过numpy() 得到张量对应的 numpy 数组,通过 type(a) ,可以知道这是一个 eager 模式的张量。
(2)参数为数字
张量元素的数据类型
在创建张量时,指定元素的数据类型。
# 要使用 tf.数据类型,否则报错 tf.constant(1.0, dtype=tf.float32) <tf.Tensor: shape=(), dtype=float32, numpy=1.0>
(3)参数为numpy数组
改变张量中元素的数据类型:tf.cast(x, dtype)
(4)参数为布尔类型
(5)参数为字符串
2、创建张量还可以使用函数 tf.convert_to_tensor() 函数
可以使用 tf.is_tensor()函数判断是否是张量对象。
也可以使用python函数,isinstance()函数,判断指定对象是否属于指定的类。
3、创建全0张量 和 全1张量
注意:shape 可以用 圆括号 或 方括号,(2, 1) 或 [2, 1]
4、创建元素值都相同的张量
- tf.fill(dims, value) : dims 就是形状
- tf.constant(value, shape)
为了避免混淆,建议使用时加上参数。
5、创建随机数张量
tensorflow 中使用 tf.random 模块创建随机数张量,包括正态分布、截断正态分布、均匀分布张量等。
(1)正态分布
注:只说明第一个参数 shape 时,则默认创建标准正态分布,即 均值为 0,标准差为 1.
(2)截断正态分布
返回的是一个截断的正态分布,截断的标准是2倍的标准差
(3)设置随机种子
我们在使用 tf.random 模块生成随机张量时,可以通过tf.random.set_seed() 函数设置随机数种子,相同的种子可以产生相同的值。
(4)创建均匀分布
(5)随机打乱张量
可以使用函数 tf.random.shuffle() 函数随机打乱传入参数的第一维数据。
5、创建序列
和 python 、numpy中的range函数一样,tensorflow 可以使用 range() 创建一段序列张量。
张量(Tensor)对象的属性
ndim、shape、dtype:维度、形状、数据类型。
获取Tensor对象的形状、元素总数 和 维度
以上便是tensorflow中的张量介绍。