TensorFlow入门极简教程(六):Norm(范数)

作为入门教程,我们尽可能多上代码,多介绍工具,少讲原理和公式。但是我也深知这样是无法讲清楚的,毕竟问题的复杂度摆在这里呢。与大家一起在Tensorflow探索一圈之后,我一定要写一个数学基础比较扎实的进一步教程。

范数(norm)初识

一般大学本科的《线性代数》教材中是不讲范数、广义逆这些知识的,需要学习《矩阵论》课程。但是很不幸,深度学习中会频繁用到。所以我们还是要有个基础的概念的。

不管是一个向量,还是一个矩阵,我们在机器学习中都经常需要有一个对于它们大小的度量。
对于向量的度量,我们的第一印象就用向量的长度就是了么。换成更有文化一点的名词就是欧基里得距离。这么高大上的距离,其实就是所有的值的平方的和的平方根。
我们可以用ord=’euclidean’的参数来调用tf.norm来求欧基里得范数。
例:

a02 = tf.constant([1,2,3,4],dtype=tf.float32)

# 创建会话
sess = tf.InteractiveSession()

print(sess.run(tf.norm(a02, ord='euclidean')))  # 5.477226

这没啥神秘的,我们用sqrt也照样算:

print(np.sqrt(1*1+2*2+3*3+4*4)) # 477225575051661

下面我们将向量的范数推广到矩阵。其实还是换汤不换药,还是求平方和的平方根。

a03 = tf.constant([[1,2],[3,4]],dtype=tf.float32)
print(a03)   # Tensor("Const_1:0", shape=(2, 2), dtype=float32)

print(sess.run(a03))

# [[1. 2.]
#  [3. 4.]]

原来一排的向量,现在换成2x2的矩阵,我们继续求范数。现在有个高大上的名字叫做Frobenius范数。

print(sess.run(tf.norm(a03,ord=2)))  # 5.477226

嗯,一算下来还是跟[1,2,3,4]向量的范数值是一样的。

你可能感兴趣的:(TensorFlow入门极简教程(六):Norm(范数))