tf.nn.embedding_lookup()的用法
函數:
tf.nn.embedding_lookup(
? ? ? ? ? ? ? ?params,
? ? ? ? ? ? ? ?ids,
? ? ? ? ? ? ? ?partition_strategy='mod',
? ? ? ? ? ? ? ?name=None,
? ? ? ? ? ? ? validate_indices=True,
? ? ? ? ? ? ? max_norm=None
)
參數說明:
params: 表示完整的嵌入張量,或者除了第一維度之外具有相同形狀的P個張量的列表,表示經分割的嵌入張量
ids: 一個類型為int32或int64的Tensor,包含要在params中查找的id
partition_strategy: 指定分區策略的字符串,如果len(params)> 1,則相關。當前支持“div”和“mod”。 默認為“mod”
name: 操作名稱(可選)
validate_indices: ?是否驗證收集索引
max_norm: 如果不是None,嵌入值將被l2歸一化為max_norm的值
?
tf.nn.embedding_lookup()函數的用法主要是選取一個張量里面索引對應的元素
tf.nn.embedding_lookup(tensor,id):即tensor就是輸入的張量,id 就是張量對應的索引
tf.nn.embedding_lookup()就是根據input_ids中的id,尋找embeddings中的第id行。比如input_ids=[1,3,5],則找出embeddings中第1,3,5行,組成一個tensor返回
embedding_lookup不是簡單的查表,id對應的向量是可以訓練的,訓練參數個數應該是 category num*embedding size,也就是說lookup是一種全連接層
?
一般做自然語言相關的。需要把每個詞都映射成向量,這個向量可以是word2vec預訓練好的,也可以是在網絡里訓練的,在網絡里需要先把詞的id轉換成對應的向量,這個函數就是做這件事的
在基于深度學習的實體識別中,字向量會提前訓練好,這個就可以理解成上面的tensor,而在實際的句子中每一個字所對應的字向量是通過id進行關聯上的
?
例子:
#coding:utf-8
import tensorflow as tf
import numpy as np
c = np.random.random([5,1]) ?##隨機生成一個5*1的數組
b = tf.nn.embedding_lookup(c, [1, 3]) ##查找數組中的序號為1和3的
with tf.Session() as sess:
????sess.run(tf.initialize_all_variables())
????print(sess.run(b))
????print(c)
輸出的結果如下所示:
[[0.5687709 ]
?[0.61091257]]
?
[[0.31777381]
?[0.5687709 ]
?[0.1779548 ]
?[0.61091257]
?[0.65478204]]
在c中第2個元素為0.5687709,第4個元素是0.61091257(索引從0開始),剛好是b的值
---------------------
作者:楊小妹_fly
來源:CSDN
原文:https://blog.csdn.net/yangfengling1023/article/details/82910951
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的tf.nn.embedding_lookup()的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习原理与框架-CNN在文本分类的应
- 下一篇: 深入理解 Embedding层的本质