import numpy as np from numpy.linalg import norm import torch from IPython.display import display import cv2 url1='http://farm3.staticflickr.com/2519/4126738647_cc436c111b_z.jpg' cap1='A motorcycle sits parked across from a herd of livestock' url2='http://farm3.staticflickr.com/2046/2003879022_1b4b466d1d_z.jpg' cap2='Motorcycle on platform to be worked on in garage' url3='https://i.natgeofe.com/n/548467d8-c5f1-4551-9f58-6817a8d2c45e/NationalGeographic_2572187_3x2.jpg' cap3='a cat laying down stretched out near a laptop' img1 = { 'flickr_url': url1, 'caption': cap1, 'image_path' : './shared_data/motorcycle_1.jpg', 'tensor_path' : './shared_data/motorcycle_1' } img2 = { 'flickr_url': url2, 'caption': cap2, 'image_path' : './shared_data/motorcycle_2.jpg', 'tensor_path' : './shared_data/motorcycle_2' } img3 = { 'flickr_url' : url3, 'caption': cap3, 'image_path' : './shared_data/cat_1.jpg', 'tensor_path' : './shared_data/cat_1' } def load_tensor(path): return torch.load(path) def load_embeddings(): ex1_embed = load_tensor(img1['tensor_path'] + '.pt') ex2_embed = load_tensor(img2['tensor_path'] + '.pt') ex3_embed = load_tensor(img3['tensor_path'] + '.pt') return ex1_embed.data.numpy(), ex2_embed.data.numpy(), ex3_embed.data.numpy() def cosine_similarity(vec1, vec2): similarity = np.dot(vec1,vec2)/(norm(vec1)*norm(vec2)) return similarity def calculate_cosine_distance(): ex1_embed, ex2_embed, ex3_embed = load_embeddings() similarity1 = cosine_similarity(ex1_embed, ex2_embed) similarity2 = cosine_similarity(ex1_embed, ex3_embed) similarity3 = cosine_similarity(ex2_embed, ex3_embed) return [similarity1, similarity2, similarity3] def calcuate_euclidean_distance(): ex1_embed, ex2_embed, ex3_embed = load_embeddings() distance1 = cv2.norm(ex1_embed,ex2_embed, cv2.NORM_L2) distance2 = cv2.norm(ex1_embed,ex3_embed, cv2.NORM_L2) distance3 = cv2.norm(ex2_embed,ex3_embed, cv2.NORM_L2) return [distance1, distance2, distance3] def show_cosine_distance(): distances = calculate_cosine_distance() print("Cosine similarity between ex1_embeded and ex2_embeded is:") display(distances[0]) print("Cosine similarity between ex1_embeded and ex3_embeded is:") display(distances[1]) print("Cosine similarity between ex2_embeded and ex2_embeded is:") display(distances[2]) def show_euclidean_distance(): distances = calcuate_euclidean_distance() print("Euclidean distance between ex1_embeded and ex2_embeded is:") display(distances[0]) print("Euclidean distance between ex1_embeded and ex3_embeded is:") display(distances[1]) print("Euclidean distance between ex2_embeded and ex2_embeded is:") display(distances[2]) show_cosine_distance() show_euclidean_distance()