张量通常较大,直接观察数据很难获得有用信息,通过获取这些张量的统计信息可以较轻松地推测张量数值的分布
张量范数
在神经网络中,范数常用来表示张量的权值大小,梯度大小等
常用范数:
- 1 −范数,定义为向量 𝒙 的所有元素绝对值之和
∣∣x∣∣1=∑i∣xi∣\mid \mid x\mid \mid _1=\sum_i\mid x_i\mid∣∣x∣∣1=i∑∣xi∣ - 2 −范数,定义为向量𝒙的所有元素的平方和,再开根号
∣∣x∣∣2=∑i∣xi∣2\mid \mid x\mid \mid _2=\sqrt{\sum_i\mid x_i\mid^2}∣∣x∣∣2=i∑∣xi∣2 - ∞\infty∞ −范数,定义为向量𝒙的所有元素绝对值的最大值
∣∣x∣∣∞=maxi(∣xi∣)\mid \mid x\mid \mid _{\infty}=max_i(\mid x_i\mid)∣∣x∣∣∞=maxi(∣xi∣)
在 TensorFlow 中,可以通过 tf.norm(x, ord)求解张量的 L1、L2、∞\infty∞等范数
其中参数 ord 指定为 1、2 时计算 L1、L2 范数,指定为 np.inf 时计算∞\infty∞ −范数
举个例子:
>>> import tensorflow as tf
>>> x = tf.ones([2,2])
>>> tf.norm(x,ord=1) # 计算 L1 范数
<tf.Tensor: id=6, shape=(), dtype=float32, numpy=4.0>
>>> tf.norm(x,ord=2) # 计算 L2 范数
<tf.Tensor: id=11, shape=(), dtype=float32, numpy=2.0>
>>> import numpy as np
>>> tf.norm(x,ord=np.inf) # 计算 ∞ 范数
<tf.Tensor: id=15, shape=(), dtype=float32, numpy=1.0>
最值、均值、和
函数 | 意义 |
---|---|
tf.reduce_max | 最大 |
tf.reduce_min | 最小 |
tf.reduce_mean | 均值 |
tf.reduce_sum | 和 |
可以求解张量在某个维度上的最大、最小、均值、和,也可以求全局最大、最小、均值、和
举个例子:
>>> y = tf.random.normal([3, 9]) # 生成数据
>>> tf.reduce_max(y, axis=1) # 求每行最大值
<tf.Tensor: id=31, shape=(3,), dtype=float32, numpy=array([1.6870528, 1.6314487, 1.2175516], dtype=float32)>
>>> tf.reduce_min(y, axis=1) # 求每行最小值
<tf.Tensor: id=33, shape=(3,), dtype=float32, numpy=array([-0.76755553, -2.7438164 , -1.4791181 ], dtype=float32)>
>>> tf.reduce_mean(y, axis=1) # 求每行均值
<tf.Tensor: id=35, shape=(3,), dtype=float32, numpy=array([ 0.38515073, -0.25860643, -0.2165079 ], dtype=float32)>
>>> tf.reduce_sum(y, axis=1) # 求每行和
<tf.Tensor: id=37, shape=(3,), dtype=float32, numpy=array([ 3.4663565, -2.327458 , -1.9485711], dtype=float32)>
把 y 看作是一个 3 行 9 列的数组,上面得出了每一行数据中的最大值、最小值、均值、和
若不加索引,则是在所有数据中求:
>>> tf.reduce_max(y) # 全局最大值
<tf.Tensor: id=39, shape=(), dtype=float32, numpy=1.6870528>
>>> tf.reduce_min(y) # 全局最小值
<tf.Tensor: id=43, shape=(), dtype=float32, numpy=-2.7438164>
>>> tf.reduce_mean(y) # 全局均值
<tf.Tensor: id=45, shape=(), dtype=float32, numpy=-0.02998786>
>>> tf.reduce_sum(y) # 全局所有数据的和
<tf.Tensor: id=47, shape=(), dtype=float32, numpy=-0.80967224>