def build_data_loader(self): # ToDo: Please define the directory to store the adjacent matrix self.sample_generator = DataLoaderBase(ratings=self.data.train) self.config["model"]["num_batch"] = ( self.data.n_train // self.config["model"]["batch_size"] + 1) self.config["model"]["n_users"] = self.data.n_users self.config["model"]["n_items"] = self.data.n_items
class LightGCN_train(TrainEngine): """An instance class from the TrainEngine base class.""" def __init__(self, config): """Initialize LightGCN_train Class. Args: config (dict): All the parameters for the model. """ self.config = config super(LightGCN_train, self).__init__(config) self.load_dataset() self.build_data_loader() self.engine = LightGCNEngine(self.config) def build_data_loader(self): """Missing Doc.""" # ToDo: Please define the directory to store the adjacent matrix self.sample_generator = DataLoaderBase(ratings=self.data.train) adj_mat, norm_adj_mat, mean_adj_mat = self.sample_generator.get_adj_mat( self.config) norm_adj = sparse_mx_to_torch_sparse_tensor(norm_adj_mat) self.config["model"]["norm_adj"] = norm_adj self.config["model"]["n_users"] = self.data.n_users self.config["model"]["n_items"] = self.data.n_items def train(self): """Train the model.""" self.monitor = Monitor(log_dir=self.config["system"]["run_dir"], delay=1, gpu_id=self.gpu_id) self.model_save_dir = os.path.join( self.config["system"]["model_save_dir"], self.config["model"]["save_name"]) self.max_n_update = self.config["model"]["max_n_update"] for epoch in range(self.config["model"]["max_epoch"]): print(f"Epoch {epoch} starts !") print("-" * 80) if epoch > 0 and self.eval_engine.n_no_update == 0: # previous epoch have already obtained better result self.engine.save_checkpoint(model_dir=self.model_save_dir) if self.eval_engine.n_no_update >= self.max_n_update: print( "Early stop criterion triggered, no performance update for {:} times" .format(self.max_n_update)) break train_loader = self.sample_generator.pairwise_negative_train_loader( self.config["model"]["batch_size"], self.config["model"]["device_str"]) self.engine.train_an_epoch(epoch_id=epoch, train_loader=train_loader) self.eval_engine.train_eval(self.data.valid[0], self.data.test[0], self.engine.model, epoch) self.config["run_time"] = self.monitor.stop() def test(self): """Test the model.""" self.engine.resume_checkpoint(model_dir=self.model_save_dir) super(LightGCN_train, self).test()
def build_data_loader(self): """Missing Doc.""" # ToDo: Please define the directory to store the adjacent matrix self.sample_generator = DataLoaderBase(ratings=self.data.train) adj_mat, norm_adj_mat, mean_adj_mat = self.sample_generator.get_adj_mat( self.config) norm_adj = sparse_mx_to_torch_sparse_tensor(norm_adj_mat) self.config["model"]["norm_adj"] = norm_adj self.config["model"]["n_users"] = self.data.n_users self.config["model"]["n_items"] = self.data.n_items
def build_data_loader(self): """Missing Doc.""" # ToDo: Please define the directory to store the adjacent matrix self.gpu_id, self.config["model"]["device_str"] = self.get_device() self.sample_generator = DataLoaderBase(ratings=self.data.train) graph_embeddings = self.sample_generator.get_graph_embeddings( self.config) self.config["model"]["graph_embeddings"] = graph_embeddings self.config["model"]["n_users"] = self.data.n_users self.config["model"]["n_items"] = self.data.n_items
class LCFN_train(TrainEngine): """An instance class from the TrainEngine base class.""" def __init__(self, config): """Initialize NGCF_train Class. Args: config (dict): All the parameters for the model. """ self.config = config print(config) super(LCFN_train, self).__init__(self.config) self.load_dataset() self.build_data_loader() def build_data_loader(self): """Missing Doc.""" # ToDo: Please define the directory to store the adjacent matrix self.gpu_id, self.config["model"]["device_str"] = self.get_device() self.sample_generator = DataLoaderBase(ratings=self.data.train) graph_embeddings = self.sample_generator.get_graph_embeddings( self.config) self.config["model"]["graph_embeddings"] = graph_embeddings self.config["model"]["n_users"] = self.data.n_users self.config["model"]["n_items"] = self.data.n_items def train(self): """Train the model.""" self.monitor = Monitor(log_dir=self.config["system"]["run_dir"], delay=1, gpu_id=self.gpu_id) self.model_save_dir = os.path.join( self.config["system"]["model_save_dir"], self.config["model"]["save_name"]) if self.config["model"]["loss"] == "bpr": train_loader = self.data.instance_bpr_loader( batch_size=self.config["model"]["batch_size"], device=self.config["model"]["device_str"], ) elif self.config["model"]["loss"] == "bce": train_loader = self.data.instance_bce_loader( num_negative=self.config["model"]["num_negative"], batch_size=self.config["model"]["batch_size"], device=self.config["model"]["device_str"], ) else: raise ValueError( f"Unsupported loss type {self.config['loss']}, try other options: 'bpr' or 'bce'" ) self.engine = LCFNEngine(self.config) self._train(self.engine, train_loader, self.model_save_dir) self.config["run_time"] = self.monitor.stop() return self.eval_engine.best_valid_performance
class NCF_train(TrainEngine): """ An instance class from the TrainEngine base class """ def __init__(self, config): """Constructor Args: config (dict): All the parameters for the model """ self.config = config super(NCF_train, self).__init__(self.config) self.load_dataset() self.build_data_loader() self.gpu_id, self.config["model"]["device_str"] = self.get_device() def build_data_loader(self): # ToDo: Please define the directory to store the adjacent matrix self.sample_generator = DataLoaderBase(ratings=self.data.train) self.config["model"]["num_batch"] = ( self.data.n_train // self.config["model"]["batch_size"] + 1) self.config["model"]["n_users"] = self.data.n_users self.config["model"]["n_items"] = self.data.n_items def train(self): """ Main training navigator Returns: """ # Options are: 'mlp', 'gmf', 'ncf_end', and 'ncf_pre'; # Train NeuMF without pre-train if self.config["model"]["model"] == "ncf_end": self.train_ncf() elif self.config["model"]["model"] == "gmf": self.train_gmf() elif self.config["model"]["model"] == "mlp": self.train_mlp() elif self.config["model"]["model"] == "ncf_pre": self.train_gmf() self.train_mlp() self.train_ncf() else: raise ValueError( "Model type error: Options are: 'mlp', 'gmf', 'ncf_end', and 'ncf_pre'." ) def train_ncf(self): """ Train NeuMF Returns: None """ self.monitor = Monitor(log_dir=self.config["system"]["run_dir"], delay=1, gpu_id=self.gpu_id) train_loader = self.sample_generator.instance_a_train_loader( self.config["model"]["num_negative"], self.config["model"]["batch_size"]) self.engine = NeuMFEngine(self.config) self.neumf_save_dir = os.path.join( self.config["system"]["model_save_dir"], self.config["model"]["neumf_config"]["save_name"], ) self._train(self.engine, train_loader, self.neumf_save_dir) self.config["run_time"] = self.monitor.stop() self.eval_engine.test_eval(self.data.test, self.engine.model) def train_gmf(self): """ Train GMF Returns: None """ self.monitor = Monitor(log_dir=self.config["system"]["run_dir"], delay=1, gpu_id=self.gpu_id) train_loader = self.sample_generator.instance_a_train_loader( self.config["model"]["num_negative"], self.config["model"]["batch_size"]) # Train GMF self.engine = GMFEngine(self.config) self.gmf_save_dir = os.path.join( self.config["system"]["model_save_dir"], self.config["model"]["gmf_config"]["save_name"], ) self._train(self.engine, train_loader, self.gmf_save_dir) while self.eval_engine.n_worker: print("Wait 15s for the complete of eval_engine.n_worker") time.sleep(15) # wait the self.config["run_time"] = self.monitor.stop() self.eval_engine.test_eval(self.data.test, self.engine.model) def train_mlp(self): """ Train MLP Returns: None """ # Train MLP self.monitor = Monitor(log_dir=self.config["system"]["run_dir"], delay=1, gpu_id=self.gpu_id) train_loader = self.sample_generator.instance_a_train_loader( self.config["model"]["num_negative"], self.config["model"]["batch_size"]) self.engine = MLPEngine(self.config) self.mlp_save_dir = os.path.join( self.config["system"]["model_save_dir"], self.config["model"]["mlp_config"]["save_name"], ) self._train(self.engine, train_loader, self.mlp_save_dir) while self.eval_engine.n_worker: print("Wait 15s for the complete of eval_engine.n_worker") time.sleep(15) # wait the self.config["run_time"] = self.monitor.stop() self.eval_engine.test_eval(self.data.test, self.engine.model)
def build_data_loader(self): """Missing Doc.""" # ToDo: Please define the directory to store the adjacent matrix self.sample_generator = DataLoaderBase(ratings=self.data.train) self.config["model"]["n_users"] = self.data.n_users self.config["model"]["n_items"] = self.data.n_items