關於nn.embedding的維度的定義,函數的理解,一些需要注意的點

關於nn.embedding的維度的定義,函數的理解,一些需要注意的點

定義

首先簡單介紹一下nn.embedding,函數調用形式如下

torch.nn.Embedding(num_embeddingsembedding_dimpadding_idx=Nonemax_norm=Nonenorm_type=2.0scale_grad_by_freq=Falsesparse=False_weight=None)

其爲一個簡單的存儲固定大小的詞典的嵌入向量的查找表,意思就是說,給一個編號,嵌入層就能返回這個編號對應的嵌入向量,嵌入向量反映了各個編號代表的符號之間的語義關係。

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

參數解釋

  • num_embeddings (python:int) – 詞典的大小尺寸,比如總共出現5000個詞,那就輸入5000。此時index爲(0-4999)

  • embedding_dim (python:int) – 嵌入向量的維度,即用多少維來表示一個符號。

  • padding_idx (python:intoptional) – 填充id,比如,輸入長度爲100,但是每次的句子長度並不一樣,後面就需要用統一的數字填充,而這裏就是指定這個數字,這樣,網絡在遇到填充id時,就不會計算其與其它符號的相關性。(初始化爲0)

  • max_norm (python:floatoptional) – 最大範數,如果嵌入向量的範數超過了這個界限,就要進行再歸一化。

  • norm_type (python:floatoptional) – 指定利用什麼範數計算,並用於對比max_norm,默認爲2範數。

  • scale_grad_by_freq (booleanoptional) – 根據單詞在mini-batch中出現的頻率,對梯度進行放縮。默認爲False.

  • sparse (booloptional) – 若爲True,則與權重矩陣相關的梯度轉變爲稀疏張量。

變量

~Embedding.weight (Tensor) –形狀爲 (num_embeddings, embedding_dim) 的學習權重採用標準正態分佈N(0,1)進行初始化

I/O形狀

  • 輸入: (∗) , 包含提取的編號的任意形狀的長整型張量。

  • 輸出: (∗,H) , 其中 * 爲輸入的形狀,H爲embedding_dim

一些注意的點

  •  nn.embedding的輸入只能是編號,不能是隱藏變量,比如one-hot,或者其它,這種情況,可以自己建一個自定義維度的線性網絡層,參數訓練可以單獨訓練或者跟隨整個網絡一起訓練(看實驗需要)
  • 如果你指定了padding_idx,注意這個padding_idx也是在num_embeddings尺寸內的,比如符號總共有500個,指定了padding_idx,那麼num_embeddings應該爲501
  • embedding_dim的選擇要注意,根據自己的符號數量,舉個例子,如果你的詞典尺寸是1024,那麼極限壓縮(用二進制表示)也需要10維,再考慮詞性之間的相關性,怎麼也要在15-20維左右,雖然embedding是用來降維的,但是也要注意這種極限維度,結合實際情況,合理定義
  • 其他的好像也沒啥要注意的啦~,歡迎評論區補充(●′ω`●)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章