欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pytorch的torch.nn.embedding()如何實(shí)現(xiàn)詞嵌入層

 更新時(shí)間:2024年02月27日 15:49:11   作者:#苦行僧  
這篇文章主要介紹了Pytorch的torch.nn.embedding()如何實(shí)現(xiàn)詞嵌入層問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

torch.nn.embedding()實(shí)現(xiàn)詞嵌入層

nn.embedding()其實(shí)是NLP中常用的詞嵌入層,在實(shí)現(xiàn)詞嵌入的過(guò)程中embedding層的權(quán)重用于隨機(jī)初始化詞的向量,該embedding層的權(quán)重參數(shù)在后續(xù)訓(xùn)練時(shí)會(huì)不斷更新調(diào)整,并被優(yōu)化。 

nn.embedding:這是一個(gè)矩陣類,該開(kāi)始時(shí)里面初始化了一個(gè)隨機(jī)矩陣,矩陣的長(zhǎng)是字典的大小,寬是用來(lái)表示字典中每個(gè)元素的屬性向量,向量的維度根據(jù)你想要表示的元素的復(fù)雜度而定。

類實(shí)例化之后可以根據(jù)字典中元素的下標(biāo)來(lái)查找元素對(duì)應(yīng)的向量。 

因?yàn)檩斎氲木渥娱L(zhǎng)度不一,有的長(zhǎng)有的短。

長(zhǎng)了截?cái)?,不夠長(zhǎng)補(bǔ)齊(我文中用’'填充,然后在nn.embedding層將其補(bǔ)0,也就是用它來(lái)表示無(wú)意義的詞,這樣在后面的max-pooling層也就自然而然會(huì)把其過(guò)濾掉,這樣就不用擔(dān)心他會(huì)影響識(shí)別。)

這里說(shuō)一下它的用法:

nn.embedding()主要3個(gè)參數(shù)

  • 第一個(gè)參數(shù)num_embeddings是指詞表大小 
  • 第二個(gè)參數(shù)embedding_dim是指你需要用多少維來(lái)表示一個(gè)符號(hào)
  • 第三個(gè)參數(shù)pading_idx即需要用0填充的符號(hào)在詞表中的位置,如下,輸出中后面兩個(gè)’'都有被填充為了0.
import torch
import torch.nn as nn


#詞表
word_to_id = {'hello':0, '<PAD>':1,'world':2}
embeds = nn.Embedding(len(word_to_id), 4,padding_idx=word_to_id['<PAD>'])

text = 'hello world <PAD> <PAD>'
hello_idx = torch.LongTensor([word_to_id[i] for i in text.split()])
#詞嵌入得到詞向量
hello_embed = embeds(hello_idx)
print(hello_embed)

從以下輸出可以看到,每行代表句子中一個(gè)單詞的詞嵌入向量,句子中的每個(gè)單詞都有4維度,最后兩個(gè)0向量是時(shí)用來(lái)填充補(bǔ)齊的沒(méi)意義。

所以embedding層其實(shí)相當(dāng)于將前面用索引編碼的句子表示乘上embedding層的可訓(xùn)練權(quán)重得到的就是詞嵌入的結(jié)果

輸出:

tensor([[-1.1436, 1.4588, -1.2755, 0.0077],
[-0.9600, -1.9986, -1.1087, -0.1520],
[ 0.0000, 0.0000, 0.0000, 0.0000],
[ 0.0000, 0.0000, 0.0000, 0.0000]], grad_fn=)

你也可以使用nn.Embedding.from_pretrained()加載預(yù)訓(xùn)練好的模型,如word2vec,glove等,在訓(xùn)練的過(guò)程中也可以邊訓(xùn)練,邊更新詞向量,加快模型的收斂。

本文用的只是簡(jiǎn)單的nn.embedding()

然后具體使用 nn.embedding() 時(shí),寫(xiě)在初始化搭建網(wǎng)絡(luò)里

如下:

class Network(nn.Module):
    def __init__(self):
        super(TextCNN, self).__init__(nvocab,embed)
        self.filter_sizes = (2, 3, 4)
        self.embed = embed
        self.num_filters = 256
        self.dropout = 0.5
        self.num_classes = num_classes
        self.n_vocab = nvocab
        #通過(guò)padding_idx將<PAD>字符填充為0,因?yàn)樗麤](méi)意義哦,后面max-pooling自然而然會(huì)把他過(guò)濾掉哦
        self.embedding = nn.Embedding(self.n_vocab, self.embed, padding_idx=word2idx['<PAD>'])
        self.convs = nn.ModuleList(
            [nn.Conv2d(1, self.num_filters, (k, self.embed)) for k in self.filter_sizes])
        
        self.dropout = nn.Dropout(self.dropout)
        self.fc = nn.Linear(self.num_filters * len(self.filter_sizes), self.num_classes)
        
    def conv_and_pool(self, x, conv):
        x = F.relu(conv(x)).squeeze(3)
        x = F.max_pool1d(x, x.size(2)).squeeze(2)
        return x
        
    def forward(self, x):
        out = self.embedding(x)
        out = out.unsqueeze(1)
        out = torch.cat([self.conv_and_pool(out, conv) for conv in self.convs], 1)
        out = self.dropout(out)
        out = self.fc(out)
        return out

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中的迭代和可迭代對(duì)象代碼示例

    python中的迭代和可迭代對(duì)象代碼示例

    這篇文章主要介紹了python中的迭代和可迭代對(duì)象代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Python 開(kāi)發(fā)工具PyCharm安裝教程圖文詳解(新手必看)

    Python 開(kāi)發(fā)工具PyCharm安裝教程圖文詳解(新手必看)

    PyCharm是一種Python IDE,帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,比如調(diào)試、語(yǔ)法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動(dòng)完成、單元測(cè)試、版本控制。今天通過(guò)本文給大家分享PyCharm安裝教程,一起看看吧
    2020-02-02
  • 在python中路徑含有空格的問(wèn)題及解決

    在python中路徑含有空格的問(wèn)題及解決

    這篇文章主要介紹了在python中路徑含有空格的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python動(dòng)態(tài)導(dǎo)入模塊的方法實(shí)例分析

    Python動(dòng)態(tài)導(dǎo)入模塊的方法實(shí)例分析

    這篇文章主要介紹了Python動(dòng)態(tài)導(dǎo)入模塊的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python動(dòng)態(tài)導(dǎo)入系統(tǒng)模塊、自定義模塊以及模塊列表的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • pandas數(shù)據(jù)聚合與分組運(yùn)算的實(shí)現(xiàn)

    pandas數(shù)據(jù)聚合與分組運(yùn)算的實(shí)現(xiàn)

    本文主要介紹了pandas數(shù)據(jù)聚合與分組運(yùn)算的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • python執(zhí)行系統(tǒng)命令后獲取返回值的幾種方式集合

    python執(zhí)行系統(tǒng)命令后獲取返回值的幾種方式集合

    今天小編就為大家分享一篇python執(zhí)行系統(tǒng)命令后獲取返回值的幾種方式集合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python從視頻中提取音頻的操作

    Python從視頻中提取音頻的操作

    這篇文章主要介紹了Python從視頻中提取音頻的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 使用keras和tensorflow保存為可部署的pb格式

    使用keras和tensorflow保存為可部署的pb格式

    這篇文章主要介紹了使用keras和tensorflow保存為可部署的pb格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • PIL包中Image模塊的convert()函數(shù)的具體使用

    PIL包中Image模塊的convert()函數(shù)的具體使用

    這篇文章主要介紹了PIL包中Image模塊的convert()函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Django 聚合函數(shù)的具體使用

    Django 聚合函數(shù)的具體使用

    orm模型中的聚合函數(shù)跟MySQL中的聚合函數(shù)作用是一致的,也有像Sum、Avg、Count、Max、Min,接下來(lái)我們逐個(gè)介紹,下面就一起來(lái)了解一下
    2021-05-05

最新評(píng)論