我已经编写了以下代码,用于在keras中进行图像字幕,并且效果很好。
image_model = Sequential()
image_model.add(Dense(EMBEDDING_DIM, input_shape=(2048,), activation='relu'))
image_model.add(RepeatVector(max_length))
lang_model = Sequential()
lang_model.add(Embedding(vocab_size,EMBEDDING_DIM , input_length=max_length))
lang_model.add(Bidirectional(LSTM(256,return_sequences=True)))
lang_model.add(Dropout(0.5))
lang_model.add(BatchNormalization())
lang_model.add(TimeDistributed(Dense(EMBEDDING_DIM)))
fin_model = Sequential()
fin_model.add(Merge([image_model, lang_model], mode='concat'))
#model.add(Concatenate([image_model, lang_model]))
fin_model.add(Dropout(0.5))
fin_model.add(BatchNormalization())
fin_model.add(Bidirectional(LSTM(1000,return_sequences=False)))
fin_model.add(Dense(vocab_size))
fin_model.add(Activation('softmax'))
print ("Model created!")
fin_model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'])
但是我想在这里添加注意力机制。不需要双向的lstm,只需一个普通的LSTM也可以。但是我看不到一个有用的博客来解释如何在keras中做到这一点。由于我是深度学习的新手,并且Keras是我所知道的唯一python库,因此非常感谢您的帮助。