作为入门教程,我们尽可能多上代码,多介绍工具,少讲原理和公式。但是我也深知这样是无法讲清楚的,毕竟问题的复杂度摆在这里呢。与大家一起在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]向量的范数值是一样的。
网友评论