# initial helper helper = Helper() # get the dict of users in group g_m_d = helper.gen_group_member_dict(config.user_in_group_path) # initial dataSet class dataset = GDataset(config.user_dataset, config.group_dataset, config.num_negatives) # get group number~ num_group = len(g_m_d) num_users, num_items = dataset.num_users, dataset.num_items # build AGREE model agree = AGREE(num_users, num_items, num_group, config.embedding_size, g_m_d, config.drop_ratio) # config information print("AGREE at embedding size %d, run Iteration:%d, NDCG and HR at %d" % (config.embedding_size, config.epoch, config.topK)) # train the model for epoch in range(config.epoch): agree.train() # 开始训练时间 t1 = time() training(agree, dataset.get_user_dataloader(config.batch_size), epoch, config, 'user') training(agree, dataset.get_group_dataloader(config.batch_size), epoch, config, 'group') print("user and group training time is: [%.1f s]" % (time() - t1))
# initial helper helper = Helper() # get the dict of users in group g_m_d = helper.gen_group_member_dict(args.user_in_group_path) # initial dataSet class dataset = GDataset(args.user_dataset, args.group_dataset, args.num_negatives, g_m_d) # get group number num_group = max(g_m_d.keys()) + 1 num_users, num_items = dataset.num_users, dataset.num_items # print('num_users',num_users) # build AGREE model agree = AGREE(num_users, num_items, num_group, args.embedding_size, g_m_d, args.drop_ratio).to(device) # config information print("AGREE at embedding size %d, run Iteration:%d" % (args.embedding_size, args.epoch)) history = [] tops = [5, 10, 15, 20] for epoch in range(args.epoch): # training agree.train() t1 = time() training(agree, dataset.get_user_dataloader(args.batch_size), epoch, args, 'user') training(agree, dataset.get_group_dataloader(128), epoch, args, 'group') print("user and group training time is: [%.1f s]" % (time() - t1)) t2 = time()
g_m_d = helper.gen_group_member_dict(config.user_in_group_path2) # 初始化数据类 在这里可以决定使用哪个数据 dataset = GDataset(config.user_dataset2, config.group_dataset2, config.num_negatives) # 获取群组的数目、训练集中用户的数目、训练集中物品的数目 num_group = len(g_m_d) num_users, num_items = dataset.num_users, dataset.num_items print("num_group is: " + str(num_group)) print("num_users is: " + str(num_users)) print("num_items is: " + str(num_items)) # 训练 AGREE 模型 agree = AGREE(num_users, num_items, num_group, config.num_follow, config.embedding_size, g_m_d, u_f_d, config.drop_ratio).to(device) # 打印配置信息 print("AGREE 的Embedding 维度为: %d, 迭代次数为: %d, NDCG、HR评估选择topK: %d" % (config.embedding_size, config.epoch, config.topK)) # 训练模型 for epoch in range(config.epoch): agree.train() # 开始训练时间 t1 = time() for _ in range(config.balance): training(agree, dataset.get_group_dataloader(config.batch_size), epoch, config, 'group')
return hr, ndcg if __name__ == '__main__': config = Config() helper = Helper() # get the dict of users in group g_m_d = helper.gen_group_member_dict(config.user_in_group_path) dataset = GDataset(config.user_dataset, config.group_dataset, config.num_negatives) # get group number num_group = len(g_m_d) num_users, num_items = dataset.num_users, dataset.num_items # build AGREE model agree = AGREE(num_users, num_items, num_group, config.embedding_size, g_m_d, config.drop_ratio, config.GPU_available) # config information print("AGREE at embedding size %d, run Iteration:%d, NDCG and HR at %d" %(config.embedding_size, config.epoch, config.topK)) # train the model if config.GPU_available: device = torch.device('cuda') agree = agree.to(device) for epoch in range(config.epoch): agree.train() training(agree, dataset.get_user_dataloader(config.batch_size), epoch, config, 'user') training(agree, dataset.get_group_dataloader(config.batch_size), epoch, config, 'group') u_hr, u_ndcg = evaluation(agree, helper, dataset.user_testRatings, dataset.user_testNegatives, config.topK, 'user') hr, ndcg = evaluation(agree, helper, dataset.group_testRatings, dataset.group_tyestNegatives, config.topK, 'group')