日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch关于高维tensor的dim上操作的理解--以cosine_similarity的dim参数为例

發(fā)布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch关于高维tensor的dim上操作的理解--以cosine_similarity的dim参数为例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題的引出

關(guān)于pytorch中dim的描述個人總是弄的不是很清楚,好多地方存在著疑問,這次在實驗過程中需要比較兩個高維tensor的相似度,由于需要確定在哪一維進行比較,故去測試了pytorch中關(guān)于tensor維度的一些現(xiàn)象。

dim

關(guān)于dim許多博客都有比我更加專業(yè)的解釋,dim具體的解釋也不是本文的重點,這里盜用其他博客里的一張圖,這張圖也是我認為對dim比較好的直觀的解釋(原文鏈接),本文的重點在于對高維tensor維度上操作,即不同的操作在不同的維度上進行會有怎樣的不同

Cosine_similarity

如果你想對兩個tensor比較他們之間的相似度,那么torch.cosine_similarity函數(shù)是一個不錯的選擇,但是在該函數(shù)的參數(shù)列表中,有一個dim值,在官方文檔中,值介紹了這個參數(shù)用來指定在哪一維上進行操作,但我在實際使用過程中卻對這個概念理解的不好,后來經(jīng)過不斷的實驗終于弄懂了dim的含義。

先從二維開始

大部分博客只說明了有關(guān)二維的情況,而二維的情況是比較好想的,重點是在高維如三維情況下的tensor,那么這里我們還是從二維開始,先去看一下基本的在維度上的操作
首先直觀上我們可以發(fā)現(xiàn),當dim選擇在哪一維上操作時,相應(yīng)的那一維就消失了(這里說的消失,指直觀現(xiàn)象,但個人覺得不是特別好理解),

p1 = torch.rand([2,3]) p2 = torch.rand([2,3]) print(p1) print(p2) p3 = torch.cosine_similarity(p1,p2,dim=1) print(p3) print(p3.shape)

對第一維操作

上述代碼作用在第一維上,那么他的結(jié)果是怎么樣的呢?

他的結(jié)果有兩個元素(個人認為這里討論維度容易混亂,不如直接說元素的個數(shù)),對應(yīng)原來的p1的shape我們發(fā)現(xiàn)在第一維上操作使得第一維消失了,即[2,3]->[2],這也是大多數(shù)博客的解釋,但我認為這并沒有揭示真正的工作過程,同時如果應(yīng)用到高維的情況,很容易得到一個令人疑惑的維度。
下面讓我們來試著理解一下dim的含義,上述的例子中的圖片說的已經(jīng)比較明顯了,在dim=1上操作,實際的含義為在以第一維為單位進行操作,即對每一行進行操作(說法不嚴謹,但為了方便理解),或者也可以這樣進行理解就是固定第一維(即tensor的列),去比較第0維(tensor的行)。

對第0維操作

那么按照該思想,如果按照第0維操作,即對每一列為單位進行操作,那么得到的應(yīng)該是一個有三個元素(為了方便理解,有不嚴謹?shù)谋硎?#xff09;的結(jié)果,分別為對應(yīng)列之間的相似度:

通過實驗驗證,我發(fā)現(xiàn)確實如此。

三維的情況

在實際應(yīng)用中,tensor的形狀一般是[batch,seq_len,embed]這樣三維的形狀,那么在三維中對不同的維度操作會有怎樣的差別

對第0維操作

p1 = torch.rand([2,2,3]) p2 = torch.rand([2,2,3]) print(p1) print(p2) p3 = torch.cosine_similarity(p1,p2,dim=0) print(p3) print(p3.shape)

當取dim=0時,注意此時第0維實際上是batch的維度,則固定batch不動,比較后面的[2,3]的元素,那么后面的是怎么比較的呢?依舊是按照第0維,這里的第0維實際上是后面那個[seq_len,embed]的第0維,即對列進行操作,所以其結(jié)果為13三個元素,而原來的tensor有兩個batch,所以分別比較后就有23個元素,第一行元素是第一個batch中的[2,3]個元素按照第0位求相似的的結(jié)果,同理第二行也是

對第一維或第二維操作

這里的過程實際上就和二維的情況一樣的,不過需要注意的是二維情況中的第0維對應(yīng)三維情況的第1維,二維情況的第1維實際上對應(yīng)三維中的第2維。
不同的是,三維中是一個batch內(nèi)進行比較,所以,只要在二維操作的基礎(chǔ)上加上batch的一維就可以了

總結(jié)

以上是生活随笔為你收集整理的Pytorch关于高维tensor的dim上操作的理解--以cosine_similarity的dim参数为例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。