pytorch embedding層詳解(從原理到實戰)

做nlp很多時候要用到嵌入層,pytorch中自帶了這個層

什麼是embedding層

這是一個寫的比較好的

我用最通俗的語言給你講
在nlp裏,embedding層就是把單詞表[‘你’,‘好’,‘嗎’]
編碼成

 ‘你’ --------------[0.2,0.1]
 ‘好’ --------------[0.3,0.2]
 ‘嗎’ --------------[0.6,0.5]

的向量的辦法

爲什麼要embedding

這是寫的詳細的

我還是用一句話概括:
因爲one-hot編碼表示太浪費內存了,我們都是窮人家的孩子。

pytorch裏面怎麼用

官方文檔/英文

類定義

在這裏插入圖片描述

參數

這裏說幾個重要參數:

  1. num_embeddings: 嵌入層字典的大小(單詞本里單詞個數)
  2. embedding_dim: 每個產出向量的大小
    在這裏插入圖片描述

說明

以下幾點需要注意:

  1. 輸入輸出第一維度默認相同

在這裏插入圖片描述

實例

>>> # an Embedding module containing 10 tensors of size 3
>>> embedding = nn.Embedding(10, 3)
>>> # a batch of 2 samples of 4 indices each
>>> input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
>>> embedding(input)
tensor([[[-0.0251, -1.6902,  0.7172],
         [-0.6431,  0.0748,  0.6969],
         [ 1.4970,  1.3448, -0.9685],
         [-0.3677, -2.7265, -0.1685]],

        [[ 1.4970,  1.3448, -0.9685],
         [ 0.4362, -0.4004,  0.9400],
         [-0.6431,  0.0748,  0.6969],
         [ 0.9124, -2.3616,  1.1151]]])


>>> # example with padding_idx
>>> embedding = nn.Embedding(10, 3, padding_idx=0)
>>> input = torch.LongTensor([[0,2,0,5]])
>>> embedding(input)
tensor([[[ 0.0000,  0.0000,  0.0000],
         [ 0.1535, -2.0309,  0.9315],
         [ 0.0000,  0.0000,  0.0000],
         [-0.1655,  0.9897,  0.0635]]])

自己的小例子更容易懂

a = torch.LongTensor([0])
embedding = torch.nn.Embedding(2, 5)
b = embedding(a)
b
Out[29]: tensor([[1.7931, 0.5004, 0.3444, 0.7140, 0.3001]], grad_fn=<EmbeddingBackward>)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章