pytorch如何實(shí)現(xiàn)多個(gè)矩陣拼接
pytorch多個(gè)矩陣拼接
問(wèn)題描述
在處理數(shù)據(jù)的時(shí)候遇到一個(gè)for循環(huán)中生成多個(gè)【max_len*max_len】的二維矩陣,現(xiàn)需要將這些矩陣在第一維上進(jìn)行堆疊,形成一個(gè)新的【batch * max_len * max_len】三維矩陣
實(shí)現(xiàn)過(guò)程
a = torch.ones(3, 3) ?# 假設(shè)生成的矩陣形狀為3*3 c = [] ?# 定義一個(gè)空列表用于存儲(chǔ)矩陣 for i in range(3): ? ? a = a ? ? c.append(a.unsqueeze(0)) # 使用cat方法可之間實(shí)現(xiàn)該操作 c = torch.cat(c, dim=0) ? print(c.size())
輸出c的形狀:
torch.Size([3, 3, 3])
pytorch中torch.cat()矩陣拼接的用法
深度學(xué)習(xí)模型里的輸出的東西還是有點(diǎn)搞的。torch.cat()的用處還是蠻大的。
下面直接舉例子理解。
一維拼接
import torch a = torch.Tensor([1, 2, 3]) b = a * 2 c = torch.cat((a, b), dim=0) ?# dim=-1為取最后一維。這里只有一維-1和0是一樣的 print(a.shape) print(c.shape) print(c)
二維拼接
dim就是選擇哪一維進(jìn)行拼接,dim=-1就表示最后一維進(jìn)行拼接,這個(gè)也很好理解,索引-1一般都指最后一個(gè)字符
a = torch.Tensor([[1, 2]])
b = a * 2
c1 = torch.cat((a, b), dim=0)
c2 = torch.cat((a, b), dim=1) ?# 這里第二維是最后一維,dim=-1和dim=1是一樣的
print("a:", a)
print("a.shape:", a.shape)
print("c1:", c1)
print("c1.shape:", c1.shape)
print("c2:", c2)
print("c2.shape:", c2.shape)當(dāng)你使用pytorch深度學(xué)習(xí)模型時(shí),隱藏層不止一層,最好將所有的隱藏層都利用起來(lái),那么就需要進(jìn)行隱藏層的拼接了。
假設(shè)隱藏層h_n.shape為(2,3,4)表示有2個(gè)隱藏層,batch_size為3(3個(gè)樣本一起訓(xùn)練),隱藏層大小為4。由于隱藏層都包含了一定的信息,那么我們都利用起來(lái)應(yīng)該效果比較好(聽(tīng)學(xué)長(zhǎng)說(shuō)很多論文都證明過(guò)了),那么每個(gè)樣本對(duì)應(yīng)的隱藏層應(yīng)該都拼接起來(lái)用即2*4的大小。這樣就需要用到拼接了。
h_n = torch.randn(2, 3, 4) ?# 假設(shè)隱藏層 # 下面三種寫(xiě)法是一個(gè)意思 feature_map = torch.cat([h_n[i] for i in range(h_n.shape[0])], dim=-1) ?# 索引第i個(gè)整元素,元素里剩下的維度缺省是全取的意思 feature_map1 = torch.cat([h_n[i, :, :] for i in range(h_n.shape[0])], dim=-1) feature_map2 = torch.cat([h_n[i] for i in range(h_n.shape[0])], dim=1) print(feature_map.shape) print(feature_map1.shape) print(feature_map2.shape)
隱藏層拼接完之后就可以放進(jìn)全連接層然后出結(jié)果了。
由于LSTM的現(xiàn)在時(shí)刻的輸出是前一個(gè)時(shí)刻的隱藏層和現(xiàn)在時(shí)刻的輸入經(jīng)過(guò)softmax得到的,而現(xiàn)在時(shí)刻的隱藏層是 現(xiàn)在時(shí)刻的輸出*tanh(現(xiàn)在時(shí)刻的細(xì)胞狀態(tài))得到的,現(xiàn)在時(shí)刻的隱藏層也是包含了現(xiàn)在輸入的信息的,因此直接放入全連接然后出結(jié)果就好了,至于模型的輸出可以不用,直接用隱藏層也是可以的吧?;蛘哒f(shuō)隱藏層就相當(dāng)于包含著各自特征信息,輸出層也是基于隱藏層來(lái)的,因此我們深度學(xué)習(xí)模型里直接用隱藏層就是在直接用那些特征吧(強(qiáng)行理解一波)
用模型的輸出或者模型隱藏層應(yīng)該都是可以得出結(jié)果的,目前對(duì)我來(lái)說(shuō),效果應(yīng)該都差不多。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用python實(shí)現(xiàn)3D聚類(lèi)圖示例代碼
這篇文章主要介紹了使用python實(shí)現(xiàn)3D聚類(lèi)圖效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
python函數(shù)的高級(jí)應(yīng)用詳解
這篇文章主要為大家介紹了python函數(shù)的高級(jí)應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11
Python?OpenCV實(shí)現(xiàn)姿態(tài)識(shí)別的詳細(xì)代碼
這篇文章主要介紹了Python?OpenCV實(shí)現(xiàn)姿態(tài)識(shí)別的方法,本文通過(guò)截圖實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Python使用gmplot創(chuàng)建動(dòng)態(tài)地圖可視化
gmplot 是一個(gè) Python 庫(kù),用于基于 Google Maps 的靜態(tài)地圖生成可視化,它提供簡(jiǎn)單的 API 來(lái)繪制標(biāo)記、路徑、熱力圖等地理信息數(shù)據(jù),本文給大家介紹了如何使用 gmplot 在 Python 中創(chuàng)建動(dòng)態(tài)地圖可視化,需要的朋友可以參考下2024-12-12
Python3標(biāo)準(zhǔn)庫(kù)之functools管理函數(shù)的工具詳解
functools模塊提供的主要工具就是partial類(lèi),可以用來(lái)“包裝”一個(gè)有默認(rèn)參數(shù)的callable對(duì)象。這篇文章主要介紹了Python3標(biāo)準(zhǔn)庫(kù)functools管理函數(shù)的工具的實(shí)例詳解,需要的朋友可以參考下2020-02-02
一個(gè)可以套路別人的python小程序?qū)嵗a
本文通過(guò)一段實(shí)例代碼給大家分享一個(gè)可以套路別人的python小程序,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
詳解 Python 讀寫(xiě)XML文件的實(shí)例
這篇文章主要介紹了詳解 Python 讀寫(xiě)XML文件的實(shí)例的相關(guān)資料,Python 生成XML文件和Python 讀取XML 的實(shí)例,需要的朋友可以參考下2017-08-08
Python selenium自動(dòng)化測(cè)試模型圖解
這篇文章主要介紹了Python selenium自動(dòng)化測(cè)試模型圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
70行Python代碼實(shí)現(xiàn)一個(gè)桌面自動(dòng)翻譯工具
PySimpleGUI是一款很棒的自動(dòng)化輔助模塊,讓你更輕松的實(shí)現(xiàn)日常任務(wù)的自動(dòng)化。本文將利用PySimpleGUI編寫(xiě)一個(gè)桌面自動(dòng)翻譯工具,感興趣的可以了解一下2022-07-07

