Tensorflow - tf.nn.embedding_lookup示例&详解

tf.nn.embedding_lookup(params, ids, partition_strategy='mod', name=None, validate_indices=True, max_norm=None)

第一个参数是词表的大小,有多少个词,每个词用多少维度的向量表示;

第二个才是Input向量的大小,也是2维的,即Input含有多少个sequence,每个sequence含有多少个word。

Example 1: 

import tensorflow as tf
import numpy as np
a = [[0.1, 0.2, 0.3], [1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3], [4.1, 4.2, 4.3]]
a = np.asarray(a)
idx1 = tf.Variable([0, 2, 3, 1], tf.int32)
idx2 = tf.Variable([[0, 2, 3, 1], [4, 0, 2, 2]], tf.int32)
# 当id为多行的情况
out1 = tf.nn.embedding_lookup(a, idx1)
out2 = tf.nn.embedding_lookup(a, idx2)
init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print (sess.run(out1))
    print (out1)
    print ('==================')
    print (sess.run(out2))
    print (out2)

Example 2:

Here, I only show a segment of the code. Readers can refer to the following URL to see the code.

https://blog.csdn.net/Zhou_Dao/article/details/103747103

seq_length = 100
num_classes = 10
vocab_size = 5000
embedding_dim = 600


input_x = tf.placeholder(tf.int32, [None, seq_length])
input_y = tf.placeholder(tf.float32, [None, num_classes])


embedding = tf.get_variable('embedding', [vocab_size, embedding_dim])
embedding_input = tf.nn.embedding_lookup(embedding, input_x)

第一个参数,embedding,可以视为一个矩阵(5000 行, 600列)二维的

vocab_size = 5000  embedding_dim = 600

每一行代表一个word,每一列则是这个word对应的embedding向量(类似于one-hot 的向量)。

第二个参数,input_x 也是一个二维数组,这里先用None表示,(我们可以先假设为300,就表明输入文本含有300个sequence),每个sequence含有100个word

tf.nn.embedding_lookup 得到的结果,此例中是 embedding_input, 是一个三维的array

300个sequence,每个sequence100个word,每个word用600维vector表示。

一般来说,这里的 input_x 的 sequence number 会设置成和 batch size 一样。

小结一下:

tf.nn.embedding_lookup 顾名思义就是,从一个embedding矩阵中,查找对应word的embedding vector。

这种简单的lookup,类似于word2vec中第一层hidden layer的操作。

发布了18 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Zhou_Dao/article/details/103751162