Tensorflow:张量(Tensor)的创建及其基础操作

Tensorflow版本:V2.8.0

  Tensorflow中所有的运算操作都是基于张量进行的。Tensorflow中的张量Tensor是具有统一类型的多维数组。这篇博文主要介绍张量的创建及基础操作。

1. 张量的创建
1.1 tf.constant()方法

  tf.constant()是一种常用的张量创建方法。具体代码如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第1张图片
这里有一点要注意,不同数值精度的张量不能直接进行计算,强制转化(tf.cast)之后才可以进行计算。具体如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第2张图片

1.2 创建特殊张量

  Tensorflow中有一些特殊的张量,比如全0或全1张量、自定义数值张量、符合特定分布的张量以及序列型张量。

  • 创建全0、全1或自定义数值的张量。这种方法创建的张量中的元素值都是一样的。
    Tensorflow:张量(Tensor)的创建及其基础操作_第3张图片
  • 创建符合特定分布的张量。
    Tensorflow:张量(Tensor)的创建及其基础操作_第4张图片
1.3 待优化张量

  前述使用tf.constant()方法创建的张量其实是常量张量,是不可变的张量。但在神经网络模型的训练中,尤其是 W W W b b b,需求不断地调整,这个时候再使用不可变张量就不合适了,所以Tensorflow中又提出了另一类型的张量:tf.Variable。其具体定义如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第5张图片

1.4 其他tf.xx_initializer()类方法

  Tensorflow中有几个以initializer结尾的方法,这几个方法的使用有一些特殊,因为这些方法得到的并不是张量,而是一个可调用对象。下面以tf.random_uniform_initializer()为例进行说明。具体如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第6张图片

1.5 其他类型的张量

  除了数值型的张量外,还可以创建布尔类型和字符串类型的张量。tf.strings模块提供了常见的字符串类型的工具函数,具体如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第7张图片

2. 基础操作

  Tensorflow中张量的基础操作很多都与Python中的Numpy类似,比如切片索引等。所以这里只会关注与Numpy中不同的部分。

2.1 维度变换

  Tensorflow中基本的维度变换操作主要有以下几种:改变视图reshape(这里不介绍了)、插入新维度expand_dims、删除维度squeeze、交换维度transpose、复制数据tile等。具体操作如下:

  • 维度变换
    Tensorflow:张量(Tensor)的创建及其基础操作_第8张图片
    这里要注意,tf.expand_dims()和tf.squeeze()方法可以导致张量维度shape(又叫视图)的改变,但不会导致数据的改变(张量的总数据元素个数及数据在内存中的存储顺序都不会改变),改变的仅仅是数据的理解方式。但是tf.tanspose()方法会改变张量中数据元素的存储顺序。
  • 复制数据
    Tensorflow:张量(Tensor)的创建及其基础操作_第9张图片
    Tensorflow中也有类似numpy的广播机制,所以复制数据步骤一般不需要人工操作。但是广播机制并不会对数据真正对数据进行复制,节省了计算资源。
2.2 张量合并

  张量的合并是指将多个张量在某个维度上合并为一个张量。Tensorflow中提供了两个方法进行张量合并。

  • tf.concat()拼接方法
    使用tf.concat()方法对多个张量进行合并时,除了合并维度,在非合并维度上的长度必须一致。该方法得到的合并后的张量不会产生新的维度,其在合并维度上的长度对所有张量在该维度上的长度之和。
    Tensorflow:张量(Tensor)的创建及其基础操作_第10张图片
  • tf.stack()堆叠方法
    使用tf.stack()方法对多个张量进行合并时,所有待合并的张量的shape必须完全相等才可以。并且该方法得到的张量会新增一个维度。tf.stack()中的参数axis可以用来制定新增维度的位置。这里的axis可以为正也可以为负。当axis ≥ 0 \geq0 0时,在axis之前插入;否则在axis之后插入。

Tensorflow:张量(Tensor)的创建及其基础操作_第11张图片
Tensorflow:张量(Tensor)的创建及其基础操作_第12张图片
下面仅以d的计算进行就拆解,来详细看看tf.stack()的具体操作流程。具体如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第13张图片

2.3 张量分割

  张量合并的逆过程即为张量分割,可以将一个张量在指定维度上分割成多个张量。具体如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第14张图片
除了使用tf.split()方法之外,若希望将张量在某个维度上全部按长度为1的方式分割,可以直接使用tf.unstack()方法。具体如下:
Tensorflow:张量(Tensor)的创建及其基础操作_第15张图片

参考文献
  1. https://tensorflow.google.cn/guide/tensor
  2. Tensorflow深度学习

你可能感兴趣的:(Tensorflow,tensorflow,深度学习)