File size: 2,845 Bytes
e7fca38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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()