首页 > 编程知识 正文

as代表什么(Embedding理解、Keras实现Embedding)

时间:2023-05-05 03:07:44 阅读:122381 作者:2022

@创建日期: 20210714

@修正: 20210714

文章目录1嵌入式介绍1.1嵌入式有三个主要目的: 1.2图像化解释双封装模块,方法介绍3 Keras实现嵌入式4参考链接

1嵌入式介绍

嵌入式是将离散变量转换为连续矢量表示的方式。 在神经网络中,嵌入式不仅可以减少离散变量的空间维数,而且可以在语义上表示该变量,因此非常有用。

1.1嵌入式有三个主要目的,可以在嵌入式空间中查找最近邻,这可以很好地用于基于用户兴趣的推荐。 作为监督性学习任务的输入。 用于可视化不同离散变量之间的关系。 1.2形象化描述one-hot不能考虑语义之间的相互关系,但嵌入式向量训练使用one-hot。 one-hot将每个单词映射到整数,但实际上该整数表示50维向量中1所在的索引位置。 用整数表示是为了便于理解和表现,但实际上在网络上可以用下图的形式来理解。 (

左侧神经元为one-hot输入,右侧为所得嵌入式表示,图中对应的红线权重为该词对应的词向量,该层神经元仅作为第一层嵌入,没有偏置和激活函数这也可以理解为乘以以下矩阵,输出是该单词的词向量。 然后,单词向量输入到下一个级别。 该层的总参数量是这些权重,也是下一个中间的矩阵。

2包模块、方法介绍包模块及方法如下,作用是将正整数(索引值)转换为固定大小的密集向量。 例: [4],[ 20 ]-[ 0.25,0.1 ],[0.6,-0.2]]。

层只能用作模型的第一层。 ref :文档层嵌入层嵌入式

fromtensorflow.keras.layersimportembeddingkeras.layers.embedding (input _ dim,output_dim,embedding s _ initi a activity_regularizer=None,embeddings_constraint=None,mask_zero=False,iinse

input_dim: int 0。 词汇表的大小,即最大整数索引1。 output_dim: int=0。 词向量的维度。 如何初始化嵌入式s _ initializer 3360嵌入式s矩阵(有关详细信息,请参阅initializers )。 嵌入式s _ regularizer :嵌入式s矩阵规范化方法(详见regularize r )。 嵌入式s _ constraint 3360嵌入式矩阵约束函数。 有关详细信息,请参阅constraints。 mask_zero:是否将0视为需要屏蔽的特殊“填充”值? 这对可变长度的循环神经网络层非常有用。 如果设置为True,则以下所有层都必须支持屏蔽: 如果不支持,将抛出异常。 如果mask_zero为True,则结果索引0不能用于词汇表。 input_dim必须与vocabulary 1大小相同。 input_length:输入序列的长度。 固定的情况。 如果需要连接Flatten和Dense层,则需要此参数。 如果没有,就无法计算Dense图层的输出大小。 3 Keras是嵌入式dingfromtensorflow.keras.layersimportdense, 实现Flatten,inputfromtensorflow.keras.layersimportembeddingfromtensorflow.keras.modelsimportmodel, sequentialfromtensorflow.keras.preprocessing.sequenceimportpad _ sequencesfromtensorflow.keras.preprocessing.text ,' Weak ',' Poor effort!' 、' not good '、' poor work '、' couldhavedonebetter.' ] # defineclasslabelslabels=NP.array ([ 1,1,1,1,1,0,

0, 0, 0])# integer encode the documentsvocab_size = 50# one_hot编码到[1,n],不包括0encoded_docs = [one_hot(d, vocab_size) for d in docs]print(encoded_docs)# pad documents to a max length of 4 wordsmax_length = 4padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')print(padded_docs)# define the modelmodel = Sequential()# 这一步对应的参数量为50*8model.add(Embedding(input_dim=vocab_size, output_dim=8, input_length=max_length, input_shape=(4, )))model.add(Flatten())model.add(Dense(1, activation='sigmoid'))# compile the modelmodel.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])# summarize the modelprint(model.summary())# fit the modelmodel.fit(padded_docs, labels, epochs=100, verbose=0)# evaluate the modelloss, accuracy = model.evaluate(padded_docs, labels, verbose=0)# loss_test, accuracy_test = model.evaluate(padded_docs, labels, verbose=0)print('Accuracy: %f' % (accuracy * 100))# test the modeltest_doc = 'good thing'encoded_test = [one_hot(test_doc, vocab_size)]padded_test = pad_sequences(encoded_test, maxlen=max_length, padding='post')print(padded_test)label_test = model.predict(padded_test)print(label_test)

输出结果

[[49, 15], [43, 6], [34, 44], [14, 6], [14], [8], [21, 44], [5, 43], [21, 6], [23, 35, 15, 47]][[49 15 0 0] [43 6 0 0] [34 44 0 0] [14 6 0 0] [14 0 0 0] [ 8 0 0 0] [21 44 0 0] [ 5 43 0 0] [21 6 0 0] [23 35 15 47]]Model: "sequential"_________________________________________________________________Layer (type) Output Shape Param # =================================================================embedding (Embedding) (None, 4, 8) 400 _________________________________________________________________flatten (Flatten) (None, 32) 0 _________________________________________________________________dense (Dense) (None, 1) 33 =================================================================Total params: 433Trainable params: 433Non-trainable params: 0_________________________________________________________________None2021-07-14 13:56:11.459951: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)Accuracy: 89.999998[[43 5 0 0]][[0.61304027]] 4 参考链接

Embedding理解与代码实现 !对原文代码有改动

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。