官方API
-
大部分数学运算:
tf.math
-
随机数:
tf.random
-
矩阵运算:
tf.linalg
- 乘法:
tf.matmul
(实际上是tf.linalg.matmul
),等同于@
- 转置:
tf.transpose(); tf.linalg.matrix_transpose
- 生成对角阵:
tf.linalg.diag
:可定制对角线上一行/下一行等信息 - 获取对角阵元素:
tf.linalg.diag_part
- 逆:
tf.linalg.inv()
- 求迹:
tf.linalg.trace()
- 范数:
tf.linalg.norm()
- 行列式:
tf.linalg.det()
- 行列式求log:
tf.linalg.logdet
- 特征值:
tf.linalg.eigvalsh()
- 特征值及特征向量:
tf.linalg.eigh
,类比np.linalg.eigh
- 最小二乘:
tf.linalg.lstsq
- 线性方程求解:
tf.linalg.solve
- 矩阵分解
qr
分解:q,r = tf.linalg.qr(a)
# 验证q @ r
svd
分解:v,s,d = tf.linalg.svd(a)
# 验证s @ v @ d
- 乘法:
-
模型评估:
tf.metrics, tf.keras.metrics
-
优化:
tf.keras.optimizers
-
其它
tf.argsort(values, axis=-1, direction='ASCENDING', stable=False, name=None)
对tensor
排序,axis
指定指定排序轴,direction
指定升序还是降序。返回排序后的元素idx
a = tf.constant([1, 10, 26.9, 2.8, 166.32, 62.3]) b = tf.argsort(a, direction='DESCENDING') #返回 [4 5 2 1 3 0]
tf.sort
同上,不同的是:tf.argsort
返回排序后的tensor
坐标,tf.sort
直接返回排序后的tensor
tf.scatter_nd(indices, updates, shape, name=None)
用updates
按idx
为indices
来生成shape的tensor
indices = tf.constant([[4], [3], [1], [7]]) updates = tf.constant([9, 10, 11, 12]) shape = tf.constant([8]) tf.scatter_nd(indices, updates, shape) # 新生成的tensor为:对应indices的idx的值为对应的updates值,故返回结果为:[0, 11, 0, 10, 9, 0, 0, 12]
tf.unique(x, out_idx=tf.dtypes.int32)
返回一维标量去重后的结果,以及原结果对应体重后的坐标tf.linspace
同np.linspace
-
广播:类同
numpy
- 如果tensor维度不同,将维度较小的tensor进行扩展,直到两个tensor的维度都一样
- 如果两个tensor在某个维度上的长度相同,或者其中一个tensor在该维度上的长度为1,那么这两个tensor在维度上是相容的
- 如果两个tensor在所有维度上都是相容的,它们就能使用广播
- 广播之后,每个维度的长度将取两个tensor在该维度长度的较大值
- 在任何一个维度上,如果一个tensor的长度为1,另一个tensor的长度大于1,那么在该维度上,就好像是对第一个tensor进行了复制
a = tf.constant([1,2,3]) b = tf.constant([[0,0,0],[1,1,1],[2,2,2]]) b + a #等价于 b + tf.broadcast_to(a,b.shape) # 返回结果 [[1, 2, 3], [2, 3, 4], [3, 4, 5]] c = tf.constant([1,2,3]) d = tf.constant([[1],[2],[3]]) c+d #等价于 tf.broadcast_to(c,[3,3]) + tf.broadcast_to(d,[3,3]) # 返回结果 [[2, 3, 4], [3, 4, 5], [4, 5, 6]]