, NodeList
, возвращенный getChildNodes()
, содержит Element
дочерние узлы (что в этом случае вас интересует), а также дочерние узлы атрибута самого Node
(чего вы не делаете).
for(int j=0; j<children.getLength();j++) {
if (children.item(j) instanceof Element == false)
continue;
NamedNodeMap n = children.item(j).getAttributes();
passwordTagAttr=(Attr) n.getNamedItem("tag");
passwordTag=stopTagAttr.getValue();
passwordList.add(passwordTag);
}
Когда вы объединяете nlp_output
с meta_input
, вы используете keras.backend.concatenate
там, где вам следует использовать keras.layers.Concatenate
. Следующий код должен работать:
nlp_input = Input(shape=(20860,))
meta_input = Input(shape=(35,))
emb = Embedding(output_dim=32, input_dim=20859)(nlp_input)
nlp_output = Bidirectional(LSTM(128, dropout=0.3, recurrent_dropout=0.3, kernel_regularizer=regularizers.l2(0.01)))(emb)
x = Concatenate()([nlp_output, meta_input])
layer1 = Dense(32, activation='relu')(x)
layer2 = Dense(1, activation='sigmoid')(layer1)
model = Model(inputs=[nlp_input , meta_input], outputs=layer2)
optimizer=adam(lr=0.00001)
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics = ['binary_accuracy'])
Примечание: Функции из keras.backend
можно обернуть в слои Lambda, но это не имеет особого смысла, когда уже есть keras.layers
слой, который обеспечивает функциональность, которая вам нужна. В вашем случае, если вы хотите использовать keras.backend.concatenate
в лямбда-слое, вы можете сделать следующее:
concatenated = keras.layers.Lambda(lambda x: keras.backend.concatenate(x))([input1, input2])