我正在尝试建立一个图像字幕模型。在
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作为输入,并再次生成概率分布。在
结果是我在每个时间步都得到相同的概率分布。在
我的问题是:
在回答你的问题之前,我想问一下,你在下面的陈述中所说的迭代是什么意思?在
给定一张图片和一个初始单词,你应该得到下一个单词,这个单词应该作为输入来生成下一个单词,这个过程应该一直持续到你得到一个代表标题结束的特殊标记(例如,EOC)。在
我会说不,但可能是这个模型很小,无法生成好的字幕。在
是的,仅仅100张图片不足以训练一个生成图片的神经网络。在
不,50个时代不算太小。您可以尝试调整其他参数,例如,学习率!在
不,你的方法没有错。您可以扩展您的方法来为图像生成好的标题。你应该在网上找到好的例子,只要浏览一下,我相信你会从中得到灵感的。在
相关问题 更多 >
编程相关推荐