Euclidean Distance is common used to be a loss function in deep learning. It is defined as:
In this tutorial, we will introduce how to calculate euclidean distance of two tensors.
Create two tensors
We will create two tensors, then we will compute their euclidean distance.
Here is an example:
import tensorflow as tf import numpy as np x = tf.Variable(np.array([[1, 2, 2, 1],[2, 1, 3, 4], [4, 3, 1, 1]]), dtype = tf.float32) xs = tf.Variable(np.array([[1, 3, 2, 1],[2, 2, 5, 4], [4, 1, 3, 1]]), dtype = tf.float32)
You should notice tensors x and xs are 2 dims.
Create a function to calculate euclidean distance
We have created a function to compute euclidean distance of two tensors in tensorflow. Here is an example:
#x and y are 2 dims def euclideanDistance(x, y): dist = tf.sqrt(tf.reduce_sum(tf.square(x - y), 1)) return dist
Calculate euclidean distance
Finally, we will calculate euclidean distance.
d = euclideanDistance(x, xs) init = tf.global_variables_initializer() init_local = tf.local_variables_initializer() with tf.Session() as sess: sess.run([init, init_local]) print(sess.run(d))
Run this code, you will get the distance is:
[1. 2.236068 2.828427]
In order to calculate the average euclidean distance, we can create a new function.
def euclideanMeanDistance(x, y): dist = tf.sqrt(tf.reduce_sum(tf.square(x - y), 1)) return tf.reduce_mean(dist)
Then we will get the average euclidean distance is:
d = euclideanMeanDistance(x, xs)
Run the code again, we will get the result:
2.0214984
However, tf.sqrt() may output NaN value, to fix this error, you can read:
Fix TensorFlow tf.sqrt() NaN Error: A Beginner Guide – TensorFlow Tutorial
There is another way to compute euclidean distance in tensorflow, we can use tf.norm().
Calculate euclidean distance using tf.norm()
Here is an example:
def euclideanMeanDistance(self, x, y): dist = tf.reduce_mean(tf.norm(x - y, axis=1, ord='euclidean')) return dist
Where x and y is 2 dims, run this code, you also can get the result:
2.0214984