keras.layers.embeddings.embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=none, activity_regularizer=none, embeddings_constraint=none, mask_zero=false, input_length=none)
『嵌入層將正整數(下標)轉換為具有固定大小的向量』
在我看來這句話簡直就不是給人說的因為他根本沒辦法用簡單的思維
那麼我們為什麼要使用嵌入層 embedding呢? 主要有這兩大原因:
使用one-hot 方法編碼的向量會很高維也很稀疏。假設我們在做自然語言處理(nlp)中遇到了乙個包含2000個詞的字典,當使用one-hot編碼時,每乙個詞會被乙個包含2000個整數的向量來表示,其中1999個數字是0,要是我的字典再大一點的話這種方法的計算效率豈不是大打折扣?
訓練神經網路的過程中,每個嵌入的向量都會得到更新。如果你看到了部落格上面的你就會發現在多維空間中詞與詞之間有多少相似性,這使我們能視覺化的了解詞語之間的關係,不僅僅是詞語,任何能通過嵌入層 embedding 轉換成向量的內容都可以這樣做。
嵌入層將正整數(下標)轉換為具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]
embedding層只能作為模型的第一層
nput_dim:大或等於0的整數,字典長度,即輸入資料最大下標+1
output_dim:大於0的整數,代表全連線嵌入的維度
embeddings_initializer: 嵌入矩陣的初始化方法,為預定義初始化方法名的字串,或用於初始化權重的初始化器。參考initializers
embeddings_regularizer: 嵌入矩陣的正則項,為regularizer物件
embeddings_constraint: 嵌入矩陣的約束項,為constraints物件
mask_zero:布林值,確定是否將輸入中的『0』看作是應該被忽略的『填充』(padding)值,該引數在使用遞迴層處理變長輸入時有用。設定為true的話,模型中後續的層必須都支援masking,否則會丟擲異常。如果該值為true,則下標0在字典中不可用,input_dim應設定為|vocabulary| + 2。
input_length:當輸入序列的長度固定時,該值為其長度。如果要在該層後接flatten層,然後接dense層,則必須指定該引數,否則dense層的輸出維度無法自動推斷。
輸入shape
形如(samples,sequence_length)的2d張量
輸出shape
形如(samples, sequence_length, output_dim)的3d張量
一般來說,這個函式只是用於詞向量方面的**,關於它具體是如何轉化的,你可以參考一下下面的這乙份
word2vec 之 skip-gram 模型
總結:
深度學習中Embedding的理解
embedding就是把高維的one hot進行降維的過程。1 一維列表也不行,二維稀疏矩陣也不行,怎麼辦呢?這裡就引入了embedding的概念,由密集向量表示,實現降維!2 並不是每個單詞都會被乙個向量來代替,而是被替換為用於查詢嵌入矩陣中向量的索引 3 同時訓練神經網路時,每個embeddin...
機器學習的embedding
embedding在數學上表示乙個maping,f x y,也就是乙個function,其中該函式是injective 就是我們所說的單射函式,每個y只有唯一的x對應,反之亦然 和structure preserving 結構儲存,比如在x所屬的空間上x1 x2,那麼對映後在y所屬空間上同理 y1 ...
深度學習中Concat層和Flatten層作用
一些其它層的作用參考 keras各種layer的作用及用法 簡要總結 concat層的功能 concat層實現輸入資料的拼接。concat層是乙個實用程式層,它將多個輸入blob連線到乙個輸出blob 按照給定的axis,注意除了規定的axis以外,被concat的輸入bolb的其他維度的size必...