Tensorflow01-认识张量Tensor

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中的张量介绍。

原文地址:https://www.cnblogs.com/dongao/p/14333300.html