Tensorflow版本:V2.8.0

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

1. 张量的创建

  Tensorflow中的数值类型数据根据其为度数划分,可以分为:标量、向量、矩阵、张量。而Tensorflow中的张量一般指维度数 > 2 >2 >2的数组(但这里不做区分)。

1.1 tf.constant()方法

  tf.constant()是一种常用的张量创建方法。具体代码如下:
在这里插入图片描述
这里有一点要注意,不同数值精度的张量不能直接进行计算,强制转化(tf.cast)之后才可以进行计算。具体如下:
在这里插入图片描述

1.2 创建特殊张量

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

  • 创建全0、全1或自定义数值的张量。这种方法创建的张量中的元素值都是一样的。
    在这里插入图片描述
  • 创建符合特定分布的张量。
    在这里插入图片描述
1.3 待优化张量

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

1.4 其他tf.xx_initializer()类方法

  Tensorflow中有几个以initializer结尾的方法,这几个方法的使用有一些特殊,因为这些方法得到的并不是张量,而是一个可调用对象。下面以tf.random_uniform_initializer()为例进行说明。具体如下:
在这里插入图片描述

1.5 其他类型的张量

  除了数值型的张量外,还可以创建布尔类型和字符串类型的张量。tf.strings模块提供了常见的字符串类型的工具函数,具体如下:
在这里插入图片描述

2. 基础操作

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

2.1 维度变换

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

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

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

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

在这里插入图片描述
在这里插入图片描述
下面仅以d的计算进行就拆解,来详细看看tf.stack()的具体操作流程。具体如下:
在这里插入图片描述

2.3 张量分割

  张量合并的逆过程即为张量分割,可以将一个张量在指定维度上分割成多个张量。具体如下:
在这里插入图片描述
除了使用tf.split()方法之外,若希望将张量在某个维度上全部按长度为1的方式分割,可以直接使用tf.unstack()方法。具体如下:
在这里插入图片描述

参考文献
  1. https://tensorflow.google.cn/guide/tensor
  2. Tensorflow深度学习
GitHub 加速计划 / te / tensorflow
184.55 K
74.12 K
下载
一个面向所有人的开源机器学习框架
最近提交(Master分支:2 个月前 )
a49e66f2 PiperOrigin-RevId: 663726708 2 个月前
91dac11a This test overrides disabled_backends, dropping the default value in the process. PiperOrigin-RevId: 663711155 2 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐