欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tf.nn.embedding_lookup函数的用法

程序员文章站 2024-02-29 21:25:28
...

tf.nn.embedding_lookup函数的用法

 tf.nn.embedding_lookup函数的用法

tf.nn.embedding_lookup函数的用法

 

  • 原型:tf.nn.embedding_lookup(params, ids, partition_strategy='mod', name=None, validate_indices=True, max_norm=None)
  • 在网上搜会发现基本都是假设ids只有一行,但是假如ids有若干行,会怎样?
  • 直接上代码:
# -*- coding= utf-8 -*-
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)
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

输出:

[[ 0.1  0.2  0.3]
 [ 2.1  2.2  2.3]
 [ 3.1  3.2  3.3]
 [ 1.1  1.2  1.3]]
Tensor("embedding_lookup:0", shape=(4, 3), dtype=float64)
==================
[[[ 0.1  0.2  0.3]
  [ 2.1  2.2  2.3]
  [ 3.1  3.2  3.3]
  [ 1.1  1.2  1.3]]

 [[ 4.1  4.2  4.3]
  [ 0.1  0.2  0.3]
  [ 2.1  2.2  2.3]
  [ 2.1  2.2  2.3]]]
Tensor("embedding_lookup_1:0", shape=(2, 4, 3), dtype=float64)



作者:fanbo
链接:https://www.jianshu.com/p/ad88a0afa98f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

很显然等同于查字典,第一个参数给你一本字典,第二个参数告诉你要查的单词 ;和我原想的完全不一样;我一直以为word2vec矩阵会是一个线性转换矩阵;

本质是等价于将一个one-hot向量变成embedding vector;所以和以前的看法是一样的;只是没有明白其本质,所以才会上述结论;一个索引转换成一个one-hot 向量,然后与转换矩阵相乘就会得到其索引所在的行,如图所示:假如第一个索引为4

tf.nn.embedding_lookup函数的用法