Keras переводит пример для использования функционального API

#keras

#keras

Вопрос:

У меня есть рабочий пример в Keras, который я хочу перевести, чтобы использовать функциональный API. Мне не хватает некоторых деталей I при запуске кода, который я получаю ValueError: total size of new array must be unchanged при использовании вложений.

Может быть, кто-то видит, что я делаю неправильно.

Рабочий код выглядит следующим образом:

 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'])
  

Где-то есть операция, которая изменяет размер, но я не уверен, где или почему это происходит. Я был бы рад, если бы кто-нибудь мог помочь мне с этим.

Комментарии:

1. Кажется, вы решили объединить прямые и обратные ссылки на merge уровне. Результат слоя слияния будет в два раза больше предыдущего слоя. Похоже, что в вашей исходной последовательной модели это не так.