實驗中遇到這樣乙個需求,在[batch_size,seq_length]的二維tensor中,找到每乙個batch_size**現頻率最高的那一項,過濾掉其他項(保持原有形狀),並獲取其編碼。
例如,輸入序列是[ [1,1,1,2,2],[3,3,4,4,4]], 期望獲得[[1,1,1,0,0],[0,0,4,4,4]],之後再獲取1和4的embedding表示。(如果想獲得[1,4]也是類似的),**如下:
import numpy as np
import torch
# 關鍵**,資料會在後面展示
top_item =
for i in tmp:
array = i.cpu(
).numpy(
) a, cnts = np.unique(array[array !=0]
, return_counts=
true
)[a[cnts.argmax()]
]*20)
x=np.where(tmp.cpu(
).numpy(
)==top_item,tmp.cpu(
).numpy(),
0)top_item_tensor = torch.tensor(x)
.type
(torch.int64)
top_item_emb=self.embedding(top_item_tensor.cuda(
))
其中tmp是類似於[ [1,1,1,2,2],[3,3,4,4,4]]的輸入,top_item_tensor是類似於[[1,1,1,0,0],[0,0,4,4,4]]的陣列,
top_item是用來鉅鹿中間結果的輔助變數,
如果你的**是在cpu上執行的,請忽略**中的cpu()、cuda()等。
使用到的資料是下面這樣的:
tmp
out[
273]
:tensor([[
912,
912,
912,..
.,0,
0,0]
,[79,
79,79,
...,
0,0,
0],[
342,
871,
342,..
.,0,
0,0]
,...
,[882,
349,
346,..
.,0,
0,0]
,[722,
785,
873,..
.,0,
0,0]
,[785,0,
0,..
.,0,
0,0]
], device=
'cuda:0'
)
tmp.shape
out[
279]
: torch.size(
[128,20
])top_item_tensor
out[
274]
:tensor([[
912,
912,
912,..
.,0,
0,0]
,[79,
79,79,
...,
0,0,
0],[
342,0,
342,..
.,0,
0,0]
,...
,[0,
0,0,
...,
0,0,
0],[
0,0,
0,..
.,0,
0,0]
,[785,0,
0,..
.,0,
0,0]
])top_item_tensor.shape
out[
278]
: torch.size(
[128,20
])self.embedding
out[
276]
: embedding(
12346,64
)top_item_emb.shape
out[
277]
: torch.size(
[128,1
,64])
git高頻率命令
我這一生都是堅定不移的唯物主義者 唯有你 我希望有來生 設定name email git config grobal user.name your name git config grobal user.email email example.com 檢視name email git config ...
Linux高頻率命令收集
linux命令 1.跳到文字的最後一行 按 g 即 shift g 2.跳到最後一行的最後乙個字元 先重複1的操作即按 g 之後按 鍵,即 shift 4 3.跳到第一行的第乙個字元 先按兩次 g 4.跳轉到當前行的第乙個字元 在當前行按 0 5.grep r 1.txt 定向 輸出當前目錄下的查詢...
php高頻率面試題
php是hypertext preprocessor的簡稱,是用來開發動態網頁的伺服器指令碼語言。問題 什麼是mvc?mvc是指m model模型 view檢視 control控制器 model 資料資訊訪問層。view view層負責將應用的資料以特定的方式展現在介面上。controller 通常...