Tensorflow Embedding层

Tensorflow的Embedding层实际功能就是完成从一个数组到另外一个数组的映射。比如数组x=[0,2,1,0,1,0],经过下面的Embedding层后,得到的输出为:

import tensorflow as tf
x = [0,1,1.2,0.4,1,0,2]
model = tf.keras.Sequential()
model.add(tf.keras.layers.Embedding(3, 2, input_length=7))#输入维,输出维
model.compile('rmsprop', 'mse')
model.predict(x)

输出:

array([[[ 0.04541579, -0.0441782 ]],
       [[ 0.03742815, -0.00683857]],
       [[ 0.03742815, -0.00683857]],
       [[ 0.04541579, -0.0441782 ]],
       [[ 0.03742815, -0.00683857]],
       [[ 0.04541579, -0.0441782 ]],
       [[-0.04684994,  0.03440091]]], dtype=float32)

实际上Embedding层就是相当于一个激活函数为f(x)=x的全连接层,通过下面函数可以获得权重:

w = model.layers[0].get_weights()
print(w)

结果:

[array([[ 0.04541579, -0.0441782 ],
       [ 0.03742815, -0.00683857],
       [-0.04684994,  0.03440091]], dtype=float32)]

与Embedding层的输出对比可以发现,当输入值为0的时候,Embedding输出为权重值的第一行,1的时候为第二行,2的时候为第三行。所以实际上Embedding层相当于完成了以输入值为索引,输出为对应的权重值。
Tensorflow Embedding层_第1张图片

Embedding的第一个参数必须不小于输入值的最大值+1,否则会报错。比如x[0]=3,如何再运行第一个程序,此时会报错。
如果输入值是浮点数,会四舍五入处理。
Embedding的第二个参数是输出的维度。本例中参数=2,所以输出为维度是2。

你可能感兴趣的:(Python,TensorFlow,tensorflow,python,深度学习)