TensorFlow进阶
数据类型
数值类型
标量
如果要使用TF提供的功能函数,必须通过TF规定的方式去创建张量,而不能使用PY语言的标准创建方式。
向量
与标量不同,向量的定义必须通过List容器传给tf.constant函数。
矩阵
多维张量
字符串类型
深度学习算法主要是以数值类型张量为主,字符串类型的数据使用频率较低。
布尔类型
数值精度
读取精度
对于某些只能处理指定精度类型的运算操作,需要提前检验输入张量的精度类型,并将不符合要求的张量进行类型转换。
类型转换
待优化张量
由于梯度运算会消耗大量的计算资源,而且会自动更新相关参数,对于不需要优化的张量,如神经网络的输入X,不需要通过tf.Variable封装;
相反,对于需要计算梯度并优化的张量,如神经网络层的W和b,需要通过tf.Variable包裹以便TF跟踪相关梯度信息。
创建张量
从数组、列表对象创建
创建全0或全1张量
创建自定义数值张量
创建已知分布的张量
正态分布和均匀分布是最常见的分布之一,创建采样自这两种分布的张量非常有用。
创建序列
张量的典型应用
标量
标量的一些用途是误差值的表示、各种测量指标的表示,例如准确度Accuracy、精度Precision和召回率Recall。
向量
通过高层接口类Dense()方式创建的网络层,张量W和b存储在类的内部,由类自动创建并管理。
矩阵
三维张量
可以看到x_train张量的shape为[25000,80],其中25000表示句子个数,80表示每个句子共80个单词,每个单词使用数字编码方式表示。
通过layers.Embedding层将数字编码的单词转换为长度是100个单词的向量。
经过Embedding层编码之后,句子张量的shape变为[25000, 80, 100],其中100表示每个单词编码长度是100的向量。
四维向量
神经网络中一般并行计算多个输入以提高计算效率,故b张图片的张量可表示为[b, h, w, 3]。
索引与切片
通过索引与切片操作可以提前张量的部分数据。
索引
当张量的维度数较高时,使用[][][][][]的方式书写不太方便,可以采用[i,j,k]的方式索引,它们是等价的。
切片
切片方式 | 意义 |
start:end:step | 从start开始读取到end,不包含end,步长为step |
start:end | 从start开始读取到end,不包含end,步长为1 |
start: | 从start开始读取完后续所有元素,步长为1 |
start::step | 从start开始读取完后续所有元素,步长为step |
:end:step | 从0开始读取到end,不包含end,步长为step |
:end | 从0开始读取到end,不包含end,步长为1 |
::step | 步长为step采样 |
:: | 读取所有元素 |
: | 读取所有元素
|
切片方式 | 意义 |
a,...,b | a维度对其到最左边,b维度对齐到最右边,中间的维度全部读取,其他维度按a/b的方式读取 |
a,... | a维度对其到最左边,a维度后的所有维度全部读取,a维度按照a方式读取。这种情况等同于a索引/切片方式 |
...,b | b维度对其到最右边下,b之前的所有维度全部读取,b维度按b方式读取 |
... | 读取张量所有数据 |
维度变换
在神经网络运算过程中,维度变换是最核心的操作。
改变视图
在存储数据时,内存并不支持这个维度层级概念,只能以平铺的方式按序写入内存,因此这种层级关系需要人为管理,也就是说,每个张量的存储顺序需要人为跟踪。
为了方便表达,把张量shape列表中相对靠左侧的维度称为大维度,shape列表中相对靠右侧的维度称为小维度。
例如[2,4,4,3]的张量中,图片数量维度与通道数量相比,图片数量称为大维度,通道数量称为小维度。
b,h*w,c | 理解为b张图片,h*w个像素点,c个通道 |
b,h,w*c | 理解为b张图片,h行,每行的特征长度为w*c |
b,h*w*c | 理解为b张图片,每张图片的特征长度为 |
改变视图是神经网络中非常常见的操作,可以通过串联多个reshape操作来实现复杂逻辑,但是在通过reshape改变视图时,必须始终记住张量的存储顺序,新视图的维度顺序不能与存储顺序相悖,否则需要通过交换维度操作将存储顺序同步过来。
增加、删除维度
增加维度
tf.expand_dims的axis为正时,表示在当前维度之前插入一个新的维度;为负时,表示在当前维度之后插入一个新的维度。
删除维度
增加维度的逆操作,与增加维度一样,删除维度只能删除长度为1的维度,也不会改变张量的存储。
交换维度
通过tf.transpose完成维度交换后,张量的存储顺序已经改变,视图也随之改变,后续的所有操作必须基于新的存续顺序和视图进行。
复制数据
Broadcasting广播机制
数学运算
加减乘除运算
乘方运算
指数和对数运算
如果希望计算其他底数的对数,可以根据对数的换底公式来计算。