Keras将示例翻译为使用功能API

时间:2016-10-22 17:07:30

标签: keras

我在Keras有一个工作示例,我想翻译以使用功能API。我在使用嵌入时运行代码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'])

某处某个操作会改变大小,但我不确定这种情况发生在何处或为何会发生。如果有人可以帮助我,我会很高兴。

0 个答案:

没有答案