簡體   English   中英

使用 python 進行深度學習(余弦相似度)

[英]Deep learning with python (Cosine similarity)

我正在學習如何使用 VGG16 model 來識別相似的物體。 我創建了一個文件夾“images”,可以在文件夾內放一些.jpg

但我對程序的 cosine_similarity 部分感到困惑。 cosine_similarity function 是將“images”文件夾中的所有jpg轉換為特征向量並相互比較。 當值趨於 1 時,它們更相似。

但我不明白下面的代碼,

sim = ratings.dot(ratings.T)

為什么 jpg 與自身比較(轉置)而不是其他人?

有人可以向我解釋下面的 cosine_similarity 嗎?

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input, decode_predictions
import numpy as np
import os
import sys

#Calculate similar matrics
def cosine_similarity(ratings):
    sim = ratings.dot(ratings.T)
    if not isinstance(sim,np.ndarray):
        sim = sim.toarray()
    norms = np.array([np.sqrt(np.diagonal(sim))])
    return (sim/norms/norms.T)


def main():
    #from "folder-->image" find all of JPEG files
    y_test=[]
    x_test=[]
    for img_path in os.listdir("C:\\Users\\Desktop\\Python\\ML\\CNN model\\VGG16\\images"):
        if img_path.endswith(".jpg"):
            img = image.load_img("C:\\Users\\Desktop\\Python\\ML\\CNN model\\VGG16\\images\\" + img_path, target_size=(224,224))
            y_test.append(img_path[0:4])
            x = image.img_to_array(img)
            x= np.expand_dims(x,axis=0)
            if len(x_test) > 0:
                x_test = np.concatenate((x_test,x))
            else:
                x_test = x

    #Convert to VGG input format 
    x_test = preprocess_input(x_test)

    #include_top=False == not getting VGG16 last 3 layers
    model = VGG16(weights = "imagenet", include_top=False)

    #Get features
    features = model.predict(x_test)

    #Calculate similar metrics
    features_compress = features.reshape(len(y_test), 7*7*512)
    sim = cosine_similarity(features_compress)

    #
    inputNo = int(sys.argv[1])

    top = np.argsort(-sim[inputNo], axis=0)[1:3]

    #get the first 2 most similar index
    recommend = [y_test[i] for i in top]
    print(recommend)

if __name__ == "__main__":
    main()

為什么 jpg 與自身(轉置)而不是其他人進行比較?

sim = cosine_similarity(features_compress)
所以在這里,我認為features_compress是 x_test 中包含的所有圖像的一組特征,而不是單個圖像。

因為在前面的 for 循環中,這就是您使用np.concatenate()所做的事情。

如果確實如此,那么將cosine_similarity()返回的結果視為一個矩陣,告訴您每個圖像與其他圖像的相似性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM