當前位置:成語大全網 - 書法字典 - 解釋神經網絡的原理和使用。嵌入pytorch。

解釋神經網絡的原理和使用。嵌入pytorch。

它是壹個簡單的查找表,用於存儲固定大小的字典的嵌入向量,即給定壹個數字,嵌入層可以返回該數字對應的嵌入向量,嵌入向量反映了每個數字所代表的符號之間的語義關系。

輸入是壹個編號列表,輸出是壹個對應的符號嵌入向量列表。

嵌入在torch.nn包下,作為訓練層,可以通過模型訓練得到合適的詞向量。

找到相應的詞向量並將其放入網絡:詞向量的輸入應該是什麽樣子的?

實際上,在通過隨機初始化建立詞向量層之後,會建立壹個“二維表”來存儲詞典中每個詞的詞向量。對於每個小批量訓練,我們應該從詞向量表中找到與小批量對應的詞的詞向量,並將其作為RNN的輸入輸入到網絡中。那麽如何在mini-batch中找出每個句子中所有單詞的單詞向量並將其放入網絡中呢?投入和產出是什麽?

首先,我們知道首先必須建立壹個字典,當建立字典時,將建立dict:word2id: stored words到字典序列號的映射。假設小批量如下:

顯然,這個mini-batch有三個句子,即batch_size=3。

第壹步是規範句子,意思是:大寫改為小寫,標點符號分離,這部分非常簡單可以跳過。處理後,小批量變成:

可以看到這個列表的元素已經變成了列表。還有壹步:按照字數從多到少排列以上三個列表。標點符號也是壹個詞。至於為什麽,我後面會說。

這就變成了:

可以看出,每個句子的長度,即每個內部列表中的元素數量為:5,5,4。這個長度也應該記錄下來。

之後,為了能夠處理它,batch的單詞表示被更改為字典中的索引號,這就是word2id的功能。轉換過程非常簡單,假設轉換後的結果如下。當然,這些序列號是我編的。

同時,應該在每個句子的末尾添加EOS,假設EOS在字典中的索引為1。

那麽長度應該被更新:

很明顯,這個迷妳批中的句子長度不壹致!因此,為了有規律地處理它,長度不足的句子被填充。填充填充假設序列號為2,填充後為:

所以可以直接進行詞向量訓練?

不能!上面的批處理有三個樣本,RNN的每壹步需要為每個樣本輸入壹個單詞,壹次輸入batch_size個樣本,因此批處理應該按照列表外層的時間步數(即序列長度)和列表內層的batch_size進行排列。也就是說,批次的維度應為:

重要的問題說三遍!

如何改變?轉換方法可以是:使用itertools模塊的zip_longest函數。而且,使用該功能,甚至可以省略填充步驟,因為該功能可以實現填充!

轉換後,結果應該是:

記得我們還記錄了壹個鏡頭:

Batch也將轉換為LongTensor:

這裏的批處理是單詞矢量層的輸入。

單詞向量層的輸出是什麽?

好了,現在使用已建立的嵌入直接通過批處理獲取單詞向量,例如:

假設單詞向量維數為6,結果為:

維度的前兩個維度與上述維度相同。可以看到還有第三個維度,這就是詞向量維度。因此,嵌入層的輸出是: