串联char嵌入和单词嵌入

时间:2018-12-16 23:53:56

标签: python machine-learning keras nlp word-embedding

我想使用char序列和单词序列作为输入。它们中的每一个都将嵌入其相关词汇,然后将所得到的嵌入串在一起。我编写以下代码来连接两个嵌入:

char_model = Sequential()
char_model.add(Embedding(vocab_size, char_emnedding_dim,input_length=char_size,embeddings_initializer='random_uniform',trainable=False, input_shape=(char_size, )))

word_model = Sequential()
word_model.add(Embedding(word_vocab_size,word_embedding_dim, weights=[embedding_matrix], input_length=max_length, trainable=False,input_shape=(max_length, )))

model = Sequential()
model.add(Concatenate([char_model, word_model]))
model.add(Dropout(drop_prob))
model.add(Conv1D(filters=250, kernel_size=3, padding='valid', activation='relu', strides = 1))
model.add(GlobalMaxPooling1D())
model.add(Dense(hidden_dims)) # fully connected layer
model.add(Dropout(drop_prob)) 
model.add(Activation('relu'))
model.add(Dense(num_classes)) 
model.add(Activation('softmax'))
print(model.summary())

执行代码时,出现以下错误:

ValueError: This model has not yet been built. Build the model first by calling build() or calling fit() with some data. Or specify input_shape or batch_input_shape in the first layer for automatic build. 

我为每个嵌入定义了input_shape,但是仍然有相同的错误。如何串联两个顺序模型?

1 个答案:

答案 0 :(得分:0)

问题出在这一行:

model.add(Concatenate([char_model, word_model]))

更不用说您错误地调用Concatenate层了,在顺序模型中不能有串联层,因为根据定义它不再是顺序模型。而是使用Keras Functional API定义这样的模型。