Keras翻译示例以使用函数API

Keras翻译示例以使用函数API,keras,Keras,我有一个Keras中的工作示例,我想将其转换为使用函数式API。当我运行我得到的代码时,我丢失了一些细节。错误:当使用嵌入时,新数组的总大小必须保持不变 也许有人看到我做错了什么 工作代码如下所示: EMBEDDING_DIM=100 embeddingMatrix = mu.loadPretrainedEmbedding('englishEmb100.txt', EMBEDDING_DIM, wordMap) ############### # Build Model # #########

我有一个Keras中的工作示例,我想将其转换为使用函数式API。当我运行我得到的代码时,我丢失了一些细节。错误:当使用嵌入时,新数组的总大小必须保持不变

也许有人看到我做错了什么

工作代码如下所示:

EMBEDDING_DIM=100
embeddingMatrix = mu.loadPretrainedEmbedding('englishEmb100.txt', EMBEDDING_DIM, wordMap)

###############
# Build Model #
###############
model = Sequential()
model.add(Embedding(vocabSize+1, EMBEDDING_DIM, weights=[embeddingMatrix], trainable=False))
#model.add(Embedding(vocabSize+1, EMBEDDING_DIM))
model.add(Bidirectional(LSTM(EMBEDDING_DIM, return_sequences=True)))
model.add(TimeDistributed(Dense(maximal_value)))
model.add(Activation('relu'))

# try using different optimizers and different optimizer configs
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
我尝试使用函数API重新编写它:

EMBEDDING_DIM=100
embeddingMatrix = mu.loadPretrainedEmbedding('englishEmb100.txt', EMBEDDING_DIM, wordMap)

input_layer = Input(shape=(longest_sequence,), dtype='int32')
emb = Embedding(vocabSize+1, EMBEDDING_DIM, weights=[embeddingMatrix]) (input_layer)
forwards = LSTM(EMBEDDING_DIM, return_sequences=True) (emb)
backwards = LSTM(EMBEDDING_DIM, return_sequences=True, go_backwards=True) (emb)

common = merge([forwards, backwards], mode='concat', concat_axis=-1)
dense = TimeDistributed(Dense(EMBEDDING_DIM, activation='tanh')) (common)
out = TimeDistributed(Dense(len(labelMap), activation='softmax')) (dense)

model = Model(input=input_layer, output=out)
model.compile(loss='categorical_crossentropy',
               optimizer='adam',
               metrics=['accuracy'])

有一个操作改变了大小,但我不确定在哪里或为什么会发生这种情况。如果有人能帮我,我会很高兴的。

似乎您选择了在
合并
层前后连接。合并层的输出大小将是前一层的两倍。这似乎与您原来的顺序模型不同。您似乎选择了在
合并
层前后连接。合并层的输出大小将是前一层的两倍。它似乎与原始顺序模型中的方式不同。