在许多神经网络库中,都有“嵌入层”,例如Keras或Lasagne中。
尽管阅读了文档,但我不确定我是否了解它的功能。例如,在Keras文档中说:
将正整数(索引)转换为固定大小的密集向量,例如。[[4],[20]]-> [[0.25,0.1],[0.6,-0.2]]
知识渊博的人可以解释它的作用以及何时使用吗?
编辑:关于文档中的粘贴,没有太多可从文档中粘贴,因此是我的问题。我不了解它所做的转换,也不知道为什么要使用它。
无论如何,这是在Keras中解释的方式:
嵌入
keras.layers.embeddings.Embedding(input_dim,output_dim,init ='uniform',input_length = None,weights = None,W_regularizer = None,W_constraint = None,mask_zero = False)将正整数(索引)转换为固定大小的密集向量,例如。[[4],[20]]-> [[0.25,0.1],[0.6,-0.2]]
输入形状:2D张量,形状为:(nb_samples,sequence_length)。输出形状:具有以下形状的3D张量:(nb_samples,sequence_length,output_dim)。参数:
input_dim:int> =0。词汇量,即。输入数据中出现1+最大整数索引。output_dim:int> =0。密集嵌入的尺寸
这就是千层面的解释:
单词嵌入层。输入应为整数类型Tensor变量。
参数:传入:一个Layer实例或一个元组
送入该层的层,或预期的输入形状。
input_size:整数
不同嵌入的数量。最后的嵌入将具有索引input_size-1。
output_size:整数
每个嵌入的大小。
W:Theano共享变量,表达式,numpy数组或可调用
嵌入矩阵的初始值,表达式或初始化程序。这应该是形状为(input_size,output_size)的矩阵。有关更多信息,请参见lasagne.utils.create_param()。
例子
>>> from lasagne.layers import EmbeddingLayer, InputLayer, get_output >>> import theano >>> x = T.imatrix() >>> l_in = InputLayer((3, )) >>> W = np.arange(3*5).reshape((3, 5)).astype('float32') >>> l1 = EmbeddingLayer(l_in, input_size=3, output_size=5, W=W) >>> output = get_output(l1, x) >>> f = theano.function([x], output) >>> x_test = np.array([[0, 2], [1, 2]]).astype('int32') >>> f(x_test) array([[[ 0., 1., 2., 3., 4.], [ 10., 11., 12., 13., 14.]], [[ 5., 6., 7., 8., 9.], [ 10., 11., 12., 13., 14.]]], dtype=float32)