亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pytorch如何快速計算余弦相似性矩陣

 更新時間:2024年02月26日 09:26:10   作者:Daft shiner  
這篇文章主要介紹了Pytorch如何快速計算余弦相似性矩陣問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Pytorch計算余弦相似性矩陣

之前一直想找一個可以快速用矩陣相乘(可以直接GPU加速)計算余弦相似性矩陣的代碼,總算找到了。

代碼是在參考代碼的基礎上進行了一些修改以適配自己的任務。

import torch


def calculate_cosine_similarity_matrix(h_emb, eps=1e-8):
    r'''

    '''
    # h_emb (N, M)
    # normalize
    a_n = h_emb.norm(dim=1).unsqueeze(1)
    a_norm = h_emb / torch.max(a_n, eps * torch.ones_like(a_n))

    # cosine similarity matrix
    sim_matrix = torch.einsum('bc,cd->bd', a_norm, a_norm.transpose(0,1))
    return sim_matrix


if __name__ == "__main__":
    x = torch.randn(100, 700)
    sim_matrix = calculate_cosine_similarity_matrix(x, eps=1e-8)
    # print(sim_matrix)
    y = torch.zeros((100,100))
    for i in range(100):
        for j in range(100):
            y[i,j] = torch.cosine_similarity(x[i].unsqueeze(dim=0), x[j].unsqueeze(dim=0))

    print(y-sim_matrix)

輸出結果:

tensor([[ 0.0000e+00,  0.0000e+00, -1.8626e-09,  ..., -1.7462e-09,
         -2.2352e-08, -1.6764e-08],
        [ 0.0000e+00, -2.3842e-07, -3.7253e-09,  ..., -2.6077e-08,
         -9.3132e-09, -1.1642e-08],
        [-1.8626e-09, -3.7253e-09,  1.1325e-06,  ..., -5.3551e-09,
         -4.6566e-09, -1.8626e-08],
        ...,
        [-1.7462e-09, -2.6077e-08, -5.3551e-09,  ...,  5.9605e-07,
         -2.4214e-08, -2.2352e-08],
        [-2.2352e-08, -9.3132e-09, -4.6566e-09,  ..., -2.4214e-08,
          2.3842e-07,  9.3132e-10],
        [-1.6764e-08, -1.1642e-08, -1.8626e-08,  ..., -2.2352e-08,
          9.3132e-10,  3.5763e-07]])

可以說誤差非常小了,非常之nice。

接下來講講為什么這么寫

首先回顧一下余弦相似性(圖源自百度百科):

其實一開始我理解不了這個代碼為什么可以實現(xiàn)(本人比較呆)。

首先我們可以將輸入看作是一個向量而不是一個矩陣,那么

a_n = h_emb.norm(dim=1)

得到的是該向量的二范數(shù),接著用

a_norm = h_emb / torch.max(a_n, eps * torch.ones_like(a_n))

可以看作是,至于為什么要加eps是防止0除。

現(xiàn)在你再把原來的向量看回是一個矩陣,那么最后的

sim_matrix = torch.einsum('bc,cd->bd', a_norm, a_norm.transpose(0,1))

就好理解得到的是一個相似性矩陣了。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python圖像運算之圖像灰度直方圖對比詳解

    Python圖像運算之圖像灰度直方圖對比詳解

    本篇文章將結合直方圖分別對比圖像灰度變換前后的變化,方便大家更清晰地理解灰度變換和閾值變換,文中的示例代碼講解詳細,需要的可以參考一下
    2022-08-08
  • 對Python中for復合語句的使用示例講解

    對Python中for復合語句的使用示例講解

    今天小編就為大家分享一篇對Python中for復合語句的使用示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Pycharm IDE的安裝和使用教程詳解

    Pycharm IDE的安裝和使用教程詳解

    這篇文章主要介紹了Pycharm IDE的安裝和使用,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Python機器學習庫scikit-learn入門開發(fā)示例

    Python機器學習庫scikit-learn入門開發(fā)示例

    scikit-learn是一個開源Python語言機器學習工具包,它涵蓋了幾乎所有主流機器學習算法的實現(xiàn),并且提供了一致的調用接口。它基于Numpy和scipy等Python數(shù)值計算庫,提供了高效的算法實現(xiàn)
    2022-07-07
  • Python調用API接口實現(xiàn)人臉識別

    Python調用API接口實現(xiàn)人臉識別

    本文主要介紹了Python調用API接口實現(xiàn)人臉識別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python設置matplotlib.plot的坐標軸刻度間隔以及刻度范圍

    Python設置matplotlib.plot的坐標軸刻度間隔以及刻度范圍

    這篇文章主要介紹了Python設置matplotlib.plot的坐標軸刻度間隔以及刻度范圍,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python實現(xiàn)盲盒抽獎功能(減庫存)

    python實現(xiàn)盲盒抽獎功能(減庫存)

    本文主要介紹了python實現(xiàn)盲盒抽獎功能,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Opencv中cv2.floodFill算法的使用

    Opencv中cv2.floodFill算法的使用

    本文結合實例,詳細的介紹了泛洪填充算法的具體使用,具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • Python pandas dataframe之重命名相同列名

    Python pandas dataframe之重命名相同列名

    這篇文章主要介紹了Python pandas dataframe之重命名相同列名方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 淺談selenium如何應對網頁內容需要鼠標滾動加載的問題

    淺談selenium如何應對網頁內容需要鼠標滾動加載的問題

    這篇文章主要介紹了淺談selenium如何應對網頁內容需要鼠標滾動加載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論