我正在尝试构建图像字幕模型。图像字幕效果不佳
modelV = createVGG16()
modelV.trainable = False
# DISCARD LAST 2 LAYERS
modelV.layers.pop()
modelV.layers.pop()
print 'LOADED VISION MODULE'
modelL = Sequential()
# CONVERTING THE INPUT PARTIAL CAPTION INDEX VECTOR TO DENSE VECTOR REPRESENTATION
modelL.add(Embedding(self.vocab_size, 256, input_length=self.max_cap_len))
modelL.add(LSTM(128,return_sequences=True))
modelL.add(TimeDistributed(Dense(128)))
print 'LOADED LANGUAGE MODULE'
# REPEATING IMAGE VECTOR TO TURN INTO A SEQUENCE
modelV.add(RepeatVector(self.max_cap_len))
print 'LOADED REPEAT MODULE'
model = Sequential()
model.add(Merge([modelV, modelL], mode='concat', concat_axis=-1))
# ENCODING THE VECTOR SEQ INTO A SINGLE VECTOR
# WHICH WILL BE USED TO COMPUTE THE PROB DISTRIB OF THE NEXT WORD
# IN THE CAPTION
model.add(LSTM(256,return_sequences=False))
model.add(Dense(self.vocab_size))
model.add(Activation('softmax'))
if(ret_model==True):
return model
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
print 'COMBINED MODULES'
# OUTPUT WILL BE OF SHAPE (samples, max_caption_len, 128)
return model
我已经尝试在50个纪元的FLickr8k测试数据集的前100个图像的全部5个标题上运行这个模型。所有的说明都是前置的,并连接在一起。 为了生成标题,我给出了输入图像和最初的单词。每次迭代我都会预测词汇表上的概率分布并获得下一个单词。在下一次迭代中,我将PredictedWord作为输入并再次生成概率分布。
会发生什么是我在每个时间步获得相同的概率分布。
我的问题是:
- 是我的模型太小无法产生字幕?
- 训练数据是否太小?
- 时代的数量是否过小?
- 我整个方法错了吗?
模型生成的代码是在这里:https://github.com/AahanSingh/ConsciousAgent/blob/master/create_model.py
的模型测试代码是在这里:https://github.com/AahanSingh/ConsciousAgent/blob/master/test_model.py
编辑:添加链接的代码。
你能否用更多细节描述实际的培训和评估过程? –