Exemplo n.º 1
0
    def train(self):
        self.train_dataset, \
        self.test_dataset = self.data_process.generate_data(batch_size=self.batch_size,
                                                            epoch=self.epoch)

        fm = FM(user_num=self.user_num,
                movie_num=self.movie_num,
                year_num=self.year_num,
                genre_num=self.genre_num,
                embedding_size=self.embedding_size,
                is_sigmoid=True)

        fm_model = fm.get_fm_model()
        fm_model.summary()
        fm_model.compile(optimizer="adam",
                         loss=keras.losses.binary_crossentropy,
                         metrics=["accuracy"])

        fm_model.fit(self.train_dataset,
                     epochs=self.epoch,
                     steps_per_epoch=1270010 // self.batch_size + 1,
                     callbacks=[
                         get_callback(self.test_dataset, self.model_path,
                                      self.version)
                     ])
Exemplo n.º 2
0
class DeepFM(object):
    def __init__(self,
                 user_num=4691,
                 movie_num=2514,
                 year_num=76,
                 genre_num=9,
                 embedding_size=16):
        self.user_num = user_num
        self.movie_num = movie_num
        self.year_num = year_num
        self.genre_num = genre_num
        self.embedding_size = embedding_size

        self.fm = FM(user_num=self.user_num,
                     movie_num=self.movie_num,
                     year_num=self.year_num,
                     genre_num=self.genre_num,
                     embedding_size=self.embedding_size)

    def get_deep_logit(self, sparse_embedding):
        x = Concatenate(axis=2)(sparse_embedding)

        x = Flatten()(x)
        #x = Lambda(lambda x: tf.squeeze(x,axis=1))(x)

        x = Dense(128, activation="relu")(x)

        x = Dense(128, activation="relu")(x)

        logit = Dense(1, use_bias=False)(x)

        return logit

    def get_deepfm_model(self):
        sparse_embedding = self.fm.get_sparse_embedding()
        fm_model = self.fm.get_fm_model(sparse_embedding)

        deep_logit = self.get_deep_logit(sparse_embedding)

        x = Add()([fm_model.outputs[0], deep_logit])

        outputs = Dense(1, activation="sigmoid")(x)

        model = Model(inputs=fm_model.inputs, outputs=outputs)

        return model