合并与分割
Concatenate 拼接
Concatenate 拼接是在某个维度上数据的拼接, 不产生新的维度.
tf.concat([a,b], axis)
在 axis 维度上, 合并两个张量, 除了 axis 维度, 要求其余维度 shape 必须相同.
Stack 堆叠
Stack 堆叠是在原有维度基础上, 创建一个新的维度, 然后在此维度上进行拼接.
tf.stack([a,b], axis)
堆叠两个张量, axis >= 0 从左向右在 axis 位置之前, axis < 0 从右向左在 axis 之后插入新的维度, 之后在此维度上进行拼接, 要求堆叠的张量 shape 完全相同.
Split 分割
tf.split(x, num_or_size_splits, axis)
表示在 axis 维度上, 对张量 x 进行分割, 分割完后 axis 维度还在, 即使维度长度为 1. num_or_size_splits 是整数表示等长平均分割, 是 List 表示按照 list 给定的长度进行分割.
例如: shape [9,2] 按照 tf.split(x, 3, 0)
分割成为 3 个 shape [3,2], 按照 tf.split(x, [2,2,5], 0)
分割成为 2 个 shape [2,2] 和 1 个 [5,2].
tf.unstack(x, axis)
表示在 axis 维度上, 以 1 为固定长度进行分割, 分割完后 axis 维度机消失.
数据统计
Norm 范数
范数表征向量 “长度” 的一种度量方法.
- L1 范数: $x$ 向量的所有元素的绝对值之和 $\begin{Vmatrix}x\end{Vmatrix}1 = \sum{i=0}^{n}{|x_i|}$
- L2 范数: $x$ 向量的所有元素的平方和的开方 $\begin{Vmatrix}x\end{Vmatrix}2 = \sum{i=0}^{n}\sqrt{|x_i|^2}$
- $\infty$ 范数: $x$ 向量的所有元素的绝对值的最大值 $\begin{Vmatrix}x\end{Vmatrix}_{\infty} = max_i(|x_i|)$
tf.norm(x, ord)
计算范数, 其中 ord 取值为 1
, 2
和 tf.inf
.
计数, 均值, 最值, 和, 最值索引
tf.reduce_max(x, axis)
求某维度或全局最大值tf.reduce_min(x, axis)
求某维度或全局最小值tf.reduce_mean(x, axis)
求某维度或全局均值tf.reduce_sum(x, axis)
求某维度或全局和
上面 4 个函数, axis 表示某个维度, 负数表示从右往左. 省略表示求全局.
tf.size(x)
求张量的总元素个数tf.argmax(x, axis)
求某维度上最大值所在的索引tf.argmin(x, axis)
求某维度上最小值所在的索引
误差
loss = keras.losses.mse(y, out)
求误差, loss_mean = tf.reduce_mean(loss)
求平均误差.
归一化指数函数
归一化指数函数(softmax 函数),是逻辑函数的一种推广, 可以将数据向量转换为该位置概率的向量.
将一个含任意实数的 K
维向量 z
压缩
到另一个 K
维实向量 σ(z)
中,使得每一个元素的范围都在(0,1)
之间,并且所有元素的和为 1
.
张量比较
tf.math.equal(a,b)
比较两个张量个位置数据是否相等返回与张量 a 或 b 的 shape 相同的判断结果张量. 与之类似的有:
equal(x,y)
x=ynot_equal(x,y)
x!=ygreater(x,y)
x>ygreater_equal(x,y)
x>=yless(x,y)
x<yless_equal(x,y)
x<=yis_nan(x)
x=nan
数据限幅
数据规整到一定范围内, 超出范围的指定到范围边界.
tf.maximum(x,a)
x>=atf.minimun(x,b)
x<=btf.clip_by_value(x, a, b)
a <= x <= b
数据归集提取
tf.gather(x, list, axis)
提取 $x$ 向量 axis 轴上 list 列举的序号位置 $i$ 的列表的数据(其余的剔除). tf.gather(x, [1,3,7], 0)
表示 x 的 0 坐标轴 1,3,7 位置的 3 个数据.
tf.gather_nd(x, list)
相对于 tf.gather
list 列举的是数据的详细位置 $[a,b,c…]$ 的列表数据(其余的剔除). tf.gather_nd(x, [[1,2],[3,2],[7,2]])
表示 x 张量的 [1,2],[3,2],[7,2] 三个位置的数据.
tf.boolean_mask(x, mask)
可以实现 gather 和 gather_nd 的功能, mask 是 True 和 False 的张量.
tf.where(cond, a, b)
其中 cond, a, b 的 shape 一致, 并且 cond 是布尔张量. cond 值为 True 取对应位置 a 的值, False 取对应位置 b 的值.
tf.where(cond)
省略 a, b 则 返回所有 cond 为 True 的位置索引.
tf.scatter_nd(indices, updates, shape)
updates 数据 拓展到 shape 形状, 拓展后的数据位置为 indices.
tf.meshgrid(x, y)
返回数据将 行向量 x 复制 y 份 [len(y), x]
, 列向量 y 复制 x 份[y, len(x)]
数据集加载操作
经典数据集
- Boston Housing 波士顿房价, 用于回归模型训练
- CIFAR10/100 真实图片分类任务, 用于图片分类
- MNIST/Fashion_MNIST 手写数字图片数据集, 用于图片分类
- IMDB 情感分类任务数据, 用于文本分类
数据集的自动获取
tf.keras.datasets.mnist.load_data()
加载数据集 mnist
, 不存在自动下载数据集. 网络不好可以在开始下载后, 出现正在下载数据的地址后停止下载, 使用迅雷下载该数据后放到 ~/.keras/datasets
路径下, 重新执行加载.
1 | import tensorflow as tf |
数据集常用操作
shuffle 打散乱序
为了防止每次执行都是相同的数据顺序
train_db.shuffle(buffer_size)
buffer_size 一般情况参数给一个比较大的数就行, 比如 10000.
batch 设置并行计算
train_db.batch(parallel)
parallel 是 GPU 进行计算的并行单位.
map 自定义预处理函数
train_db.map(preprocess)
其中 preprocess 是自定义函数, 接收 (x,y) 元组作为参数, 需要返回处理后的 (x,y) 元组.
step 和 epoch 循环
对数据集进行 epoch + step 双层循环, 或者通过 train_db.repeat()
设置 epoch 循环次数 + step 单层循环的方式, 可以对模型进行训练.