#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
уровне. Результат слоя слияния будет в два раза больше предыдущего слоя. Похоже, что в вашей исходной последовательной модели это не так.