一、范数概念
L1范数:定义为向量所有元素绝对值之和:
L2范数:定义为向量所有元素的平方和再开根号:
∞ −范数:定义为向量x的所有元素绝对值的最大值:
对于矩阵、张量,同样可以利用向量范数的计算公式,等价于将矩阵、张量打平成向量后计算。
"""
范数
tf.norm(x, ord, axis)
ord 指定为 1、 2 时计算 L1、 L2 范数,指定为 np.inf 时计算∞范数
axis:axis=0表示对矩阵的每一列求范数,axis=1表示对矩阵的每一行求范数
L1范数:定义为向量𝒙的所有元素绝对值之和
L2范数:定义为向量𝒙的所有元素的平方和,再开根号
∞ (无穷大)范数,定义为向量𝒙的所有元素绝对值的最大值
"""
x = tf.ones([2,2])
print(tf.norm(x, ord=1, axis=0))
print(tf.norm(x,ord=1))# 计算L1范数
print(tf.norm(x,ord=2))# 计算L2范数
print(tf.norm(x,ord=3))# 计算L3范数
print(tf.norm(x,ord=np.inf))# 计算∞范数
二、最大最小值、均值、求和
tf.reduce_max(x, axis), tf.reduce_min(x, axis), tf.reduce_mean(x, axis), tf.reduce_sum(x, axis) 可以求解张量在某个维度上的最大、最小、均值、和,也可以求全局最大、最小、均值、和。
axis:在axis上维度进行的操作,例如,axis=0表示在第0维度(列)上进行求最值;axis=1表示在第1维度(行)上进行求最值
当axis为空时,tf.reduce_*函数会求解出全局元素的最大、最小、均值、和
# 创建一个张量
x = tf.random.normal([4,5])
# print(x)
# # 统计概率维度上的最大值
max = tf.reduce_max(x,axis=0)
# # 统计概率维度上的最小值
min = tf.reduce_min(x,axis=1)
# 统计概率维度上的均值
mean = tf.reduce_mean(x,axis=1)
# # 统计概率维度上的和
sum = tf.reduce_sum(x,axis=1)
三、获得最值所在的索引号
通过tf.argmax(x, axis)
tf.argmin(x, axis) 可以分别求出在 axis 轴上,x 的最大值、最小值所在的索引号
x = tf.random.normal([4,5])
maxIndex = tf.argmax(x,axis=0)
四、张量比较
作用:计算分类任务的准确率等指标,一般需要将预测结果和真实标签比较
,统计比较结果中正确的数量来就是计算准确率
通过tf.equal(a, b)完成张量之间的对比操作
a = tf.constant([1, 2, 3, 2, 5])
b = tf.range(5)
equal = tf.equal(a, b)
print("b:",b)
print("equal:", equal)
tf.equal()函数返回布尔型的张量之间比较的结果
,之后只需要统计张量中 True 元素的个数,即可知道预测正确的个数。
为了达到这个目的,我们先将布尔型转换为整型张量,再求和其中 1 的个数,可以得到比较结果中 True 元素的个数
# boolean型转为int型
result = tf.cast(equal, dtype=tf.int32)
#统计True的个数
correct = tf.reduce_sum(result)
print("correct:", correct)
#计算准确率accuracy, 公式:结果为true的个数/样本个数
accuracy = correct / result.shape[0]
五、去重与还原
tf.unique(tensor) 去除重复
tf.gather(tensor, idx) 还原
a = tf.constant([4,2,2,1,4,0])
unique_tensor, idx = tf.unique(a)
print("unique_tensor:", unique_tensor)
print("idx:", idx)
origin_a = tf.gather(unique_tensor, idx)
print("origin_a:", origin_a)