我正在基于本文开发一个模型,由于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])
然而,当我在处理单词数量可变的句子时,我确实需要嵌入层中的掩蔽。
你在填充句子以使它们有相等的长度吗?如果是这样,那么您可以让模型自己发现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层之类的后续层的行为。 如果检查