class NeuMF(BaseModel): def __init__(self, args, num_users, num_items): BaseModel.__init__(self, args, num_users, num_items) self.layers = eval(args.layers) self.lambda_layers = eval(args.reg_layers) self.num_factors = args.num_factors self.model_GMF = GMF(args, num_users, num_items) self.model_MLP = MLP(args, num_users, num_items) def build_core_model(self, user_indices, item_indices): vector_GMF, len_GMF, params_GMF = self.model_GMF.build_core_model( user_indices, item_indices) vector_MLP, len_MLP, params_MLP = self.model_MLP.build_core_model( user_indices, item_indices) model_vector = tf.concat([vector_GMF, vector_MLP], 1) model_len = len_GMF + len_MLP model_params = [] model_params.extend(params_GMF) model_params.extend(params_MLP) return model_vector, model_len, model_params def build_model(self, user_indices=None, item_indices=None): if not user_indices: user_indices = tf.placeholder(tf.int32, [None]) self.user_indices = user_indices if not item_indices: item_indices = tf.placeholder(tf.int32, [None]) self.item_indices = item_indices self.ratings = tf.placeholder(tf.float32, [None]) model_vector, model_len, model_params = self.build_core_model( user_indices, item_indices) self.output, self.loss, self.error, self.raw_error, self.train_step = self.build_train_model( model_vector, model_len, self.ratings, model_params)