torch.nn.Embedding使用


在RNN模型的訓練過程中,需要用到詞嵌入,而torch.nn.Embedding就提供了這樣的功能。我們只需要初始化torch.nn.Embedding(n,m),n是單詞數,m就是詞向量的維度。

一開始embedding是隨機的,在訓練的時候會自動更新。

 

舉個簡單的例子:

word1和word2是兩個長度為3的句子,保存的是單詞所對應的詞向量的索引號。

隨機生成(4,5)維度大小的embedding,可以通過embedding.weight查看embedding的內容。

輸入word1時,embedding會輸出第0、1、2行詞向量的內容,word2同理。

import torch

word1 = torch.LongTensor([0, 1, 2])
word2 = torch.LongTensor([3, 1, 2])
embedding = torch.nn.Embedding(4, 5)

print(embedding.weight)
print('word1:')
print(embedding(word1))
print('word2:')
print(embedding(word2))

 

除此之外,我們也可以導入已經訓練好的詞向量,但是需要設置訓練過程中不更新。

如下所示,emb是已經訓練得到的詞向量,先初始化等同大小的embedding,然后將emb的數據復制過來,最后一定要設置weight.requires_grad為False。

        self.embedding = torch.nn.Embedding(emb.size(0), emb.size(1))
        self.embedding.weight = torch.nn.Parameter(emb)

        # 固定embedding
        self.embedding.weight.requires_grad = False

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM