深度学习中Keras中的Embedding层的理解与使用

单词嵌入提供了单词的密集表示及其相对含义,它们是对简单包模型表示中使用的稀疏表示的改进,可以从文本数据中学习字嵌入,并在项目之间重复使用。它们也可以作为拟合文本数据的神经网络的一部分来学习。Word Embedding单词嵌入是使用密集的矢量表示来表示单词和文档的一类方法。词嵌入是对传统的词袋模型编码方案的改进,传统方法使用大而稀疏的矢量来表示每个单词或者在矢量内对每个单词进行评分以表示整个词汇表,这些表示是稀疏的,因为每个词汇的表示是巨大的,给定的词或文档主要由零值组成的大向量表示。相反,在嵌入中,单词由密集向量表示,其中向量表示将单词投影到连续向量空间中。向量空间中的单词的位置是从文本中学习的,并且基于在使用单词时围绕单词的单词。学习到的向量空间中的单词的位置被称为它的嵌入:Embedding。从文本学习单词嵌入方法的两个流行例子包括:Word2Vec.GloVe.除了这些精心设计的方法之外,还可以将词嵌入学习作为深度学习模型的一部分。这可能是一个较慢的方法,但可以通过这样为特定数据集定制模型。Keras Embedding LayerKeras提供了一个嵌入层,适用于文本数据的神经网络。它要求输入数据是整数编码的,所以每个字都用一个唯一的整数表示。这个数据准备步骤可以使用Keras提供的Tokenizer API来执行。嵌入层用随机权重进行初始化,并将学习训练数据集中所有单词的嵌入。它是一个灵活的图层,可以以多种方式使用,例如:它可以单独使用来学习一个单词嵌入,以后可以保存并在另一个模型中使用。它可以用作深度学习模型的一部分,其中嵌入与模型本身一起学习。它可以用来加载预先训练的词嵌入模型,这是一种迁移学习。嵌入层被定义为网络的第一个隐藏层。它必须指定3个参数:input_dim:这是文本数据中词汇的取值可能数。例如,如果您的数据是整数编码为0-9之间的值,那么词汇的大小就是10个单词;output_dim:这是嵌入单词的向量空间的大小。它为每个单词定义了这个层的输出向量的大小。例如,它可能是32或100甚至更大,可以视为具体问题的超参数;input_length:这是输入序列的长度,就像您为Keras模型的任何输入层所定义的一样,也就是一次输入带有的词汇个数。例如,如果您的所有输入文档都由1000个字组成,那么input_length就是1000。例如,下面我们定义一个词汇表为200的嵌入层(例如从0到199的整数编码的字,包括0到199),一个32维的向量空间,其中将嵌入单词,以及输入文档,每个单词有50个单词。e = Embedding(input_dim=200, output_dim=32, input_length=50)嵌入层自带学习的权重,如果将模型保存到文件中,则将包含嵌入图层的权重。嵌入层的输出是一个二维向量,每个单词在输入文本(输入文档)序列中嵌入一个。如果您希望直接将Dense层接到Embedding层后面,则必须先使用Flatten层将Embedding层的2D输出矩阵平铺为一维矢量。现在,让我们看看我们如何在实践中使用嵌入层。学习 Embedding的例子在本节中,我们将看看如何在文本分类问题上拟合神经网络的同时学习单词嵌入。我们将定义一个小问题,我们有10个文本文档,每个文档都有一个学生提交的工作评论。每个文本文档被分类为正的“1”或负的“0”。这是一个简单的情感分析问题。首先,我们将定义文档及其类别标签。12345678910111213# define documents 定义文档docs = ['Well done!','Good work','Great effort','nice work','Excellent!','Weak','Poor effort!','not good','poor work','Could have done better.']# define class labels 定义分类标签labels =…

0 Comments

keras 中模型的保存及重用

深度学习中如何保存最佳模型,如何重用已经保存的模型?本文主要介绍Keras 保存及重用模型的方法保存模型如下,我们预定义保存的hdf5文件名,再初始化ModelCheckpoint,将其加入Keras的callback里(即每个batch结束后做的事情),那么模型就会在每次batch结束后对比,保存最好的模型。1234567891011121314from keras.callbacks import ModelCheckpoint# create modelmodel = Sequential()model.add(...)model.add(...)model.add(...)# Compile modelmodel.compile(...)# checkpointfilepath="weights-{epoch:02d}-{val_acc:.2f}.hdf5"checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')# Fit the modelmodel.fit(X, Y, validation_split=0.33, epochs=150, batch_size=10, callbacks=[checkpoint], verbose=0)结束后,我们会得到如下的结果,12345...weights-53-0.76.hdf5weights-71-0.76.hdf5weights-77-0.78.hdf5weights-99-0.78.hdf5如果我们只想保存一个最好的模型,那么把保存文件名字固定为filepath="weights.best.hdf5"即可。load模型注意,之前保存的只是模型的weights,重新load需要再次定义模型结构再load weights并再次combine,例如12345678910111213from keras.callbacks import…

0 Comments