This post describes how to calculate euclidean norm
in TensorFlow
. Lets understand euclidean norm
implementation with below code snippets
Calculating euclidean norm
with TensorFlow
import tensorflow as tf
tensor = tf.constant([[1,2], [3,4]], dtype=tf.float32)
print(tf.norm(
tensor, ord='euclidean', axis=None, keepdims=None, name=None
))
Output
tf.Tensor(5.477226, shape=(), dtype=float32)
Now lets see how tf.norm
is calculating the norm, what
all math operation it is performing behind the scenes and produce the
same result without using tf.norm
import tensorflow as tf
import math
from tensorflow.python.ops import math_ops
tensor = tf.constant([[1,2], [3,4]], dtype=tf.float32)
## get conjugate of tensor
tensor1 = math_ops.conj(tensor)
print(tensor1)
## multiply tensor to conjugate tensor
tensor2 = tensor*math_ops.conj(tensor)
print(tensor2)
## apply reduce_sum on tensor2
tensor3 = math_ops.reduce_sum(tensor2)
print(tensor3)
## apply sqrt on tensor3
output = math_ops.sqrt(tensor3)
print(output)
## output using tf.norm
out_norm = tf.norm(tensor, ord='euclidean', axis=None, keepdims=None, name=None)
print(out_norm)
Output
tf.Tensor(
[[1. 2.]
[3. 4.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[ 1. 4.]
[ 9. 16.]], shape=(2, 2), dtype=float32)
tf.Tensor(30.0, shape=(), dtype=float32)
tf.Tensor(5.477226, shape=(), dtype=float32)
tf.Tensor(5.477226, shape=(), dtype=float32)
In the above snippet we calculated euclidean norm
with axis=None
, now we will calculate along the axis=0
import tensorflow as tf
import math
from tensorflow.python.ops import math_ops
tensor = tf.constant([[1,2], [3,4]], dtype=tf.float32)
## get conjugate of tensor
tensor1 = math_ops.conj(tensor)
print(tensor1)
## multiply tensor to conjugate tensor
tensor2 = tensor*math_ops.conj(tensor)
print(tensor2)
## apply reduce_sum on tensor2
tensor3 = math_ops.reduce_sum(tensor2, axis=0)
print(tensor3)
## apply sqrt on tensor3
output = math_ops.sqrt(tensor3)
print(output)
## output using tf.norm
out_norm = tf.norm(tensor, ord='euclidean', axis=0, keepdims=None, name=None)
print(out_norm)
Output
tf.Tensor(
[[1. 2.]
[3. 4.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[ 1. 4.]
[ 9. 16.]], shape=(2, 2), dtype=float32)
tf.Tensor([10. 20.], shape=(2,), dtype=float32)
tf.Tensor([3.1622777 4.472136 ], shape=(2,), dtype=float32)
tf.Tensor([3.1622777 4.472136 ], shape=(2,), dtype=float32)
So we got the same output with and without using tf.norm
Change axis=1
and calculate euclidean norm
import tensorflow as tf
import math
from tensorflow.python.ops import math_ops
tensor = tf.constant([[1,2], [3,4]], dtype=tf.float32)
## get conjugate of tensor
tensor1 = math_ops.conj(tensor)
print(tensor1)
## multiply tensor to conjugate tensor
tensor2 = tensor*math_ops.conj(tensor)
print(tensor2)
## apply reduce_sum on tensor2
tensor3 = math_ops.reduce_sum(tensor2, axis=1)
print(tensor3)
## apply sqrt on tensor3
output = math_ops.sqrt(tensor3)
print(output)
## output using tf.norm
out_norm = tf.norm(tensor, ord='euclidean', axis=1, keepdims=None, name=None)
print(out_norm)
Output
tf.Tensor(
[[1. 2.]
[3. 4.]], shape=(2, 2), dtype=float32)
tf.Tensor(
[[ 1. 4.]
[ 9. 16.]], shape=(2, 2), dtype=float32)
tf.Tensor([ 5. 25.], shape=(2,), dtype=float32)
tf.Tensor([2.236068 5. ], shape=(2,), dtype=float32)
tf.Tensor([2.236068 5. ], shape=(2,), dtype=float32)
Category: TensorFlow