我正在嘗試構建圖像字幕模型。圖像字幕效果不佳
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
編輯:添加鏈接的代碼。
你能否用更多細節描述實際的培訓和評估過程? –