我正在尝试使用CNN-RNN模型编写一个图像字幕生成器。对于RNN部分,我创建了自己的类CaptionGenerator
,其中一个方法create_model
(如下所示)创建了两个顺序模型image model和language model并将它们连接起来。之后我编译了模型。你知道吗
def create_model(self, ret_model = False):
image_model = Sequential()
image_model.add(Dense(EMBEDDING_DIM, input_dim = 4096, activation='relu'))
image_model.add(RepeatVector(self.max_cap_len))
lang_model = Sequential()
lang_model.add(Embedding(self.vocab_size, 256, input_length=self.max_cap_len))
lang_model.add(LSTM(256,return_sequences=True))
lang_model.add(TimeDistributed(Dense(EMBEDDING_DIM)))
model = Sequential()
model.add(keras.layers.Concatenate([image_model, lang_model]))
model.add(LSTM(1000,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'])
return model
在另一个文件中,我创建了这个类的一个对象,我使用它创建了上述模型的一个对象。你知道吗
def train_model(weight = None, batch_size=32, epochs = 10):
cg = caption_generator.CaptionGenerator()
model = cg.create_model()
if weight != None:
model.load_weights(weight)
counter = 0
file_name = 'weights-improvement-{epoch:02d}.hdf5'
checkpoint = ModelCheckpoint(file_name, monitor='loss', verbose=1,
save_best_only=True, mode='min')
callbacks_list = [checkpoint]
print(" Fitting the data ")
model.fit_generator(cg.data_generator(batch_size=batch_size),
steps_per_epoch=cg.total_samples/batch_size,
epochs=epochs, verbose=2,
callbacks=callbacks_list)
try:
model.save('Models/WholeModel.h5', overwrite=True)
model.save_weights('Models/Weights.h5',overwrite=True)
except:
print ( "Error in saving model." )
print ( "Training complete...\n" )
但是当我调用function model.fit_generator()
时,我得到了以下错误,尽管该模型已在CaptionGenerator
类的create_model
方法中编译:
RuntimeError: You must compile your model before using it.
目前没有回答
相关问题 更多 >
编程相关推荐