当前位置: 首页 > 知识库问答 >
问题:

keras-嵌入层掩码_零导致后续层出现异常

梁丘柏
2023-03-14

我正在基于本文开发一个模型,由于globalxpooling1d层不支持掩蔽,我遇到了一个异常。

我有一个嵌入层,参数设置为True。但是,由于后续的globalxpooling1d层不支持掩蔽,我得到了一个异常。预期会出现例外情况,因为嵌入层的文档中实际说明了嵌入层之后的任何后续层都应该支持掩蔽。

然而,当我在处理单词数量可变的句子时,我确实需要嵌入层中的掩蔽。(即,由于输入的长度不同)我的问题是,我应该如何改变我的模型,使掩蔽仍然是模型的一部分,并且不会在globalxpooling1d层造成问题?

下面是模型的代码。

model = Sequential()
embedding_layer = Embedding(dictionary_size, num_word_dimensions,
                            weights=[embedding_weights], mask_zero=True,
                            embeddings_regularizer=regularizers.l2(0.0001))
model.add(TimeDistributed(embedding_layer,
                          input_shape=(max_conversation_length, timesteps)))

model.add(TimeDistributed(Bidirectional(LSTM(m // 2, return_sequences=True,
                                             kernel_regularizer=regularizers.l2(0.0001)))))
model.add(TimeDistributed(Dropout(0.2)))
model.add(TimeDistributed(GlobalMaxPooling1D()))
model.add(Bidirectional(LSTM(h // 2, return_sequences = True,
                             kernel_regularizer=regularizers.l2(0.0001)),
                        merge_mode='concat'))
model.add(Dropout(0.2))
crf = CRF(num_tags, sparse_target=False, kernel_regularizer=regularizers.l2(0.0001))
model.add(crf)
model.compile(optimizer, loss = crf.loss_function, metrics=[crf.accuracy])

共有1个答案

司马祖鹤
2023-03-14

然而,当我在处理单词数量可变的句子时,我确实需要嵌入层中的掩蔽。

你在填充句子以使它们有相等的长度吗?如果是这样,那么您可以让模型自己发现0是填充的,因此应该被忽略,而不是掩蔽。因此,您不需要显式掩码。这种方法也用于处理数据中的缺失值,如本答案所建议的。

 类似资料:
  • 我做了一个小的概念验证,以了解Keras中的致密层是否支持掩蔽。下面是我的代码:- 我的数据集仅包含2个样本,每个样本具有125个特征,如下所示:- 使用掩码层,我希望密集层在训练网络时忽略所有“-1”值。因此我编写了。 我还访问了Keras Github代码(https://github.com/keras-team/keras/blob/master/keras/layers/core.py)

  • 在模型中添加LSTM层之前,我不确定是否需要添加密集输入层。例如,使用以下模型: LSTM层是否为输入层,密集层是否为输出层(即无隐藏层)?或者Keras是否创建了一个输入层,这意味着LSTM层将是一个隐藏层?

  • Embedding层 Embedding层只能作为模型的第一层。 较为费劲的就是第一句话: 嵌入层将正整数(下标)转换为具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]] 哪到底咋转啊,亲? 这涉及到词向量,具体看可以参考Word2vec 上图的流程是把文章的单词使用词向量来表示。 (1)提取文章所有的单词,把其按其出现的次数降许(这里只取前50000个)

  • 我正在尝试在keras中复制VGG16模型,以下是我的代码: maxpooling2d层在注释的行处给出了一个错误 错误显示: /usr/local/lib/python2.7/dist-packages/keras/engine/topology.pyc in create_node(cls,outbound_layer,inbound_layers,node_indexes,tensor_in

  • 问题内容: 我拥有的代码(我无法更改)将Resnet与input_tensor一起使用。 研究源代码,ResNet50函数使用创建一个新的keras输入层,然后创建模型的其余部分。这是我要用自己的模型复制的行为。我从h5文件加载我的模型。 由于此模型已经具有输入层,因此我想用定义的新输入层替换它。 如何替换输入层? 问题答案: 使用以下方法保存模型时: 它将保存以下内容: 模型的体系结构,允许创建

  • 问题内容: 我认为当输入值为0时将输出0,因此以下各层可能会跳过计算或其他操作。 如何运作? 例: 实际输出为:(数字是随机的) 但是,我认为输出将是: 问题答案: 实际上,设置嵌入层不会导致返回零向量。而是,嵌入层的行为不会改变,它将返回索引为零的嵌入向量。您可以通过检查Embedding层权重(即在您提到的示例中为)来确认这一点。取而代之的是,它将影响诸如RNN层之类的后续层的行为。 如果检查