Example #1
0
 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
Example #2
0
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()
Example #3
0
 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
Example #4
0
    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
Example #5
0
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
Example #6
0
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)
Example #7
0
 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