pytorch中的可學習查找表實現之nn.Embedding

假設我們需要一個查找表(Lookup Table),我們可以根據索引數字快速定位查找表中某個具體位置并讀取出來。最簡單的方法,可以通過一個二維數組或者二維list來實現。但如果我希望查找表的值可以通過梯度反向傳播來修改,那么就需要用到nn.Embedding來實現了。

其實,我們需要用反向傳播來修正表值的場景還是很多的,比如我們想存儲數據的通用特征時,這個通用特征就可以用nn.Embedding來表示,常見于現在的各種codebook的trick。閑話不多說,我們來看栗子:

import torch
from torch import nntable = nn.Embedding(10, 3)
print(table.weight)
idx = torch.LongTensor([[1]])
b = table(idx)
print(b)'''
output
Parameter containing:
tensor([[-0.2317, -0.9679, -1.9324],[ 0.2473,  1.1043, -0.7218],[ 0.5425, -0.3109, -0.1330],[-1.4006, -0.0675,  0.1376],[-0.1995,  0.7168,  0.5692],[-1.3572, -0.6407, -0.0128],[-0.0773,  1.1928, -1.0836],[ 0.1721, -0.9232, -0.4059],[ 1.6108, -0.4640,  0.3535],[ 0.6975,  1.6554, -0.2217]], requires_grad=True)
tensor([[[ 0.2473,  1.1043, -0.7218]]], grad_fn=<EmbeddingBackward0>)
'''

這段代碼實際上就實現了一個查找表的功能,索引值為[[1]](注意有兩個中括弧),返回值為對應的表值。我們還可以批量查找表值:

import torch
from torch import nntable = nn.Embedding(10, 3)
print(table)
print(table.weight)indices = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
print(indices)out = table(indices)
print(out)
print(out.shape)

通過輸入索引張量來獲取表值:[2,4] -> [2,4,3],請注意這個shape變化,即對應位置的索引獲得對應位置的表值

參考:https://pytorch.org/docs/stable/generated/torch.nn.Embedding.html
本人親自整理,有問題可留言交流~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719193.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719193.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719193.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上傳項目的全部依賴到maven私有倉庫-nexus

背景 項目之前的私有倉庫不能使用了&#xff0c;本地倉庫可以&#xff0c;但是一旦clean就沒了&#xff0c;所以在本地有依賴的時候可以自己搭建一個maven私有倉庫然后將依賴全部上傳上去 搭建&#xff1a;使用docker-compose方式搭建 docker-compose文件 version: "3…

C語言入門到精通之練習47:一個偶數總能表示為兩個素數之和。

題目&#xff1a;一個偶數總能表示為兩個素數之和。 程序分析&#xff1a;我去&#xff0c;這是什么題目&#xff0c;要我證明這個問題嗎&#xff1f;真不知道怎么證明。那就把一個偶數串聯成兩個素數吧。 實例 #include<stdio.h> #include<stdlib.h> int Isprime…

Python算法100例-3.1 回文數

完整源代碼項目地址&#xff0c;關注博主私信源代碼后可獲取 1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展7.巧用字符串技巧 1&#xff0e;問題描述 打印所有不超過n&#xff08;取n<256&#xff09;的其平方具有對稱性質的數&#xff08;也稱回…

在國內如何申請US,visa卡?

隨著跨境與AI的發展大家對美國虛擬卡的需求也越來越多&#xff0c;比如說亞馬遜、ebay、Etsy、ChatGPTPLUS、midjourney、POE等等軟件以及海淘的需要&#xff0c;所以我們需要用到美國虛擬卡的場景就越來越多 如何獲得一張US 虛擬信用卡&#xff1f; 方法很簡單&#xff0c;點…

一線大廠軟件測試面試題及答案解析,2024最強版...

【軟件測試面試突擊班】2024吃透軟件測試面試最全八股文攻略教程&#xff0c;一周學完讓你面試通過率提高90%&#xff01;&#xff08;自動化測試&#xff09; 1、什么是兼容性測試?兼容性測試側重哪些方面? 參考答案: 兼容測試主要是檢查軟件在不同的硬件平臺、軟件平臺上…

CNAN知識圖譜輔助推薦系統

CNAN知識圖譜輔助推薦系統 文章介紹了一個基于KG的推薦系統模型&#xff0c;代碼也已開源&#xff0c;可以看出主要follow了KGNN-LS 。算法流程大致如下&#xff1a; 1. 算法介紹 算法除去attention機制外&#xff0c;主要的思想在于&#xff1a;user由交互過的item來表示、i…

OpenShift AI - 部署并使用 LLM 模型

《OpenShift / RHEL / DevSecOps 匯總目錄》 說明&#xff1a;本文已經在 OpenShift 4.15 RHODS 2.7.0 的環境中驗證 文章目錄 安裝 OpenShift AI 環境安裝 Minio 對象存儲軟件配置 Single Model Serving 運行環境創建項目和 Workbench準備模型和配置 Model Server訪問 LLM 模…

arm-linux-gnueabi、arm-linux-gnueabihf 交叉編譯器區別

1、arm-linux-gnueabi&#xff1a; 使用軟件浮點&#xff08;軟浮點&#xff09;。這意味著所有的浮點運算都將由軟件庫來處理&#xff0c;而不會利用硬件中的浮點運算單元。因此&#xff0c;生成的目標代碼包含了對軟件浮點庫的調用。 2、arm-linux-gnueabihf&#xff1a; 使…

c++八股文:c++新特性

文章目錄 [toc] 1.C11的新特性有哪些2.智能指針3.類型推導4.左值和右值5.nullptr6.范圍for循環7.lambda表達式參考 1.C11的新特性有哪些 語法的改進 &#xff08;1&#xff09;統?的初始化?法 &#xff08;2&#xff09;成員變量默認初始化 &#xff08;3&#xff09;auto關…

mybatis中#{}和${}的區別?

#{}是占位符&#xff0c;預編譯處理&#xff1b;${}是拼接符&#xff0c;字符串替換&#xff0c;沒有預編譯處理。 Mybatis在處理#{}時&#xff0c;#{}傳入參數是以字符串傳入&#xff0c;會將SQL中的#{}替換為?號&#xff0c;調用PreparedStatement的set方法來賦值。 Mybat…

DCTNet

DCTNet http://giantpandacv.com/academic/%E7%AE%97%E6%B3%95%E7%A7%91%E6%99%AE/%E9%A2%91%E5%9F%9F%E4%B8%AD%E7%9A%84CNN/CVPR%202020%20%E5%9C%A8%E9%A2%91%E5%9F%9F%E4%B8%AD%E5%AD%A6%E4%B9%A0%E7%9A%84DCTNet/ 一個對輸入圖像進行頻域轉換和選擇的方法&#xff0c;達到…

python實現手機號歸屬地查詢

手機上突然收到了某銀行的短信提示&#xff0c;看了一下手機的位數&#xff0c;正好是11位。我一想&#xff0c;這不就是標準的手機號碼嗎&#xff1f;于是一個想法涌上心頭——用python的庫實現查詢手機號碼歸屬地查詢自由。 那實現的效果如下&#xff1a; 注&#xff1a;電…

達夢數據庫基礎操作(一):用戶操作

達夢數據庫基礎操作(一)&#xff1a;用戶操作 1 達夢運行狀態 SELECT banner as 版本信息 FROM v$version;1.2 達夢版本號 SELECT banner as 版本信息 FROM v$version;1.3 用戶相關操作 默認用戶名密碼&#xff1a;SYSDBA/SYSDBA 注意&#xff1a;在哪個數據庫下創建的用戶…

2.3_3 進程互斥的硬件實現方法

文章目錄 2.3_3 進程互斥的硬件實現方法&#xff08;一&#xff09;中斷屏蔽方法&#xff08;二&#xff09;TestAndSet指令&#xff08;三&#xff09;Swap指令 總結&#xff08;四&#xff09;互斥鎖 2.3_3 進程互斥的硬件實現方法 學習提示&#xff1a; 1.理解各方法的原理 …

寶塔Linux面板遷移網站數據的詳細步驟是什么?

寶塔Linux面板遷移網站數據的詳細步驟是什么&#xff1f; 準備工作&#xff1a;確保寶塔面板處于最新版本并與服務器環境一致。如果需要遷移到其他機器&#xff0c;需要將遷入服務器的寶塔面板信息和API秘鑰填寫好。秘鑰的有效期為7天&#xff0c;建議在使用后手動關閉接口以保…

Python從0到100(二):Python語言介紹及第一個Pyhon程序

前言&#xff1a; 零基礎學Python&#xff1a;Python從0到100最新最全教程。 想做這件事情很久了&#xff0c;這次我更新了自己所寫過的所有博客&#xff0c;匯集成了Python從0到100&#xff0c;共一百節課&#xff0c;幫助大家一個月時間里從零基礎到學習Python基礎語法、Pyth…

springcloud:3.3測試重試機制

服務提供者【test-provider8001】 Openfeign遠程調用服務提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相關接口 測試遠程調用&#xff1a;http://localhost:8001/payment/index 服務消費者【test-consumer-resilience4j8004】 Openfeign遠程調用消費者搭建 文章地址http:/…

Vue 3 中如何使用全局 API?

Vue 3 中的全局 API 使用詳解 Vue 3 相較于 Vue 2 在全局 API 的使用上有了較大的變化。Vue 3 引入了新的全局 API 創建方式&#xff0c;并通過 createApp 方法替代了 Vue 2 中的 new Vue()。這種變化使得 Vue 3 在全局 API 的使用上更加靈活&#xff0c;也更好地支持了 tree-…

UNIapp實現局域網內在線升級

首先是UNIapp 生成apk 用Hbuilder 進行打包 可以從網站https://www.yunedit.com/reg?gotocert 使用自有證書&#xff0c;目測比直接使用云證書要快一些。 發布apk 網站 用IIS發布即可 注意事項中記錄如下內容 第一、需要在 iis 的MiMe 中添加apk 的格式&#xff0c;否則無法…

如何本地創建websocket服務端并發布到公網實現遠程訪問

文章目錄 1. Java 服務端demo環境2. 在pom文件引入第三包封裝的netty框架maven坐標3. 創建服務端,以接口模式調用,方便外部調用4. 啟動服務,出現以下信息表示啟動成功,暴露端口默認99995. 創建隧道映射內網端口6. 查看狀態->在線隧道,復制所創建隧道的公網地址加端口號7. 以…