當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python mxnet.symbol.Embedding用法及代碼示例

用法:

mxnet.symbol.Embedding(data=None, weight=None, input_dim=_Null, output_dim=_Null, dtype=_Null, sparse_grad=_Null, name=None, attr=None, out=None, **kwargs)

參數

  • data(Symbol) - 嵌入運算符的輸入數組。
  • weight(Symbol) - 嵌入權重矩陣。
  • input_dim(int, required) - 輸入索引的詞匯量。
  • output_dim(int, required) - 嵌入向量的維度。
  • dtype({'bfloat16', 'float16', 'float32', 'float64', 'int32', 'int64', 'int8', 'uint8'},optional, default='float32') - 重量的數據類型。
  • sparse_grad(boolean, optional, default=0) - 在反向計算中計算行稀疏梯度。如果設置為 True,則 grad 的存儲類型為row_sparse。
  • name(string, optional.) - 結果符號的名稱。

返回

結果符號。

返回類型

Symbol

將整數索引映射到向量表示(嵌入)。

該運算符將單詞映射到高維空間中的實值向量,稱為單詞嵌入。這些嵌入可以捕獲單詞的語義和句法屬性。例如,已經注意到在學習的嵌入空間中,相似的詞往往彼此靠近,而不同的詞則相距甚遠。

對於形狀為 (d1, ..., dK) 的輸入數組,輸出數組的形狀為 (d1, ..., dK, output_dim)。所有輸入值應為 [0, input_dim) 範圍內的整數。

如果input_dim為ip0,output_dim為op0,則嵌入權重矩陣的形狀必須為(ip0, op0)。

當“sparse_grad” 為 False 時,如果提及的任何索引太大,則將其替換為嵌入矩陣中最後一個向量的索引。當“sparse_grad” 為 True 時,如果發現無效索引將引發錯誤。

例子:

input_dim = 4
output_dim = 5

// Each row in weight matrix y represents a word. So, y = (w0,w1,w2,w3)
y = [[  0.,   1.,   2.,   3.,   4.],
     [  5.,   6.,   7.,   8.,   9.],
     [ 10.,  11.,  12.,  13.,  14.],
     [ 15.,  16.,  17.,  18.,  19.]]

// Input array x represents n-grams(2-gram). So, x = [(w1,w3), (w0,w2)]
x = [[ 1.,  3.],
     [ 0.,  2.]]

// Mapped input x to its vector representation y.
Embedding(x, y, 4, 5) = [[[  5.,   6.,   7.,   8.,   9.],
                          [ 15.,  16.,  17.,  18.,  19.]],

                         [[  0.,   1.,   2.,   3.,   4.],
                          [ 10.,  11.,  12.,  13.,  14.]]]

權重的存儲類型可以是row_sparse 或默認值。

注意

如果“sparse_grad”設置為True,梯度w.r.t權重的存儲類型將是“row_sparse”。隻有一部分優化器支持稀疏梯度,包括 SGD、AdaGrad 和 Adam。請注意,默認情況下延遲更新已打開,其執行方式可能與標準更新不同。有關詳細信息,請在以下位置查看優化 API:https://mxnet.incubator.apache.org/api/python/optimization/optimization.html

例子

假設我們要將 26 個英文字母映射到 16 維向量表示。

>>> vocabulary_size = 26
>>> embed_dim = 16
>>> seq_len, batch_size = (10, 64)
>>> input = Variable('letters')
>>> op = Embedding(data=input, input_dim=vocabulary_size, output_dim=embed_dim,
...name='embed')
>>> SymbolDoc.get_output_shape(op, letters=(seq_len, batch_size))
{'embed_output': (10L, 64L, 16L)}
>>> vocab_size, embed_dim = (26, 16)
>>> batch_size = 12
>>> word_vecs = test_utils.random_arrays((vocab_size, embed_dim))
>>> op = Embedding(name='embed', input_dim=vocab_size, output_dim=embed_dim)
>>> x = np.random.choice(vocab_size, batch_size)
>>> y = test_utils.simple_forward(op, embed_data=x, embed_weight=word_vecs)
>>> y_np = word_vecs[x]
>>> test_utils.almost_equal(y, y_np)
True

相關用法


注:本文由純淨天空篩選整理自apache.org大神的英文原創作品 mxnet.symbol.Embedding。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。