Closed DX12321 closed 2 years ago
感谢反馈!确实存在这个问题,因为目前 Dataset 和 DataLoader 的定位都不是特别灵活,推荐两种方法,选其一即可。我们后续会考虑如何优化自定义模型的使用,现在只能先这样凑合一下了。我在本地测试了一下方案二,是可以成功运行的。
把模型文件重命名为 mygcegnn.py
并放到 recbole_gnn/model/sequential_recommender/
文件夹下;
在 recbole_gnn/model/sequential_recommender/__init__.py
中加入
from recbole_gnn.model.sequential_recommender.mygcegnn import myGCEGNN
recbole_gnn/data/dataset.py
中新建一个 class myGCEGNNDataset
,直接继承 GCEGNNDataset
。main.py
main.py
中的dataset = create_dataset(config)
替换成
from recbole_gnn.data.dataset import GCEGNNDataset
dataset = GCEGNNDataset(config)
train_data, valid_data, test_data = data_preparation(config, dataset)
替换成
from recbole_gnn.utils import _get_customized_dataloader
from recbole.data.utils import create_samplers
built_datasets = dataset.build()
train_dataset, valid_dataset, test_dataset = built_datasets
train_sampler, valid_sampler, test_sampler = create_samplers(config, dataset, built_datasets)
train_data = _get_customized_dataloader(config, 'train')(config, train_dataset, train_sampler, shuffle=True)
valid_data = _get_customized_dataloader(config, 'evaluation')(config, valid_dataset, valid_sampler, shuffle=False)
test_data = _get_customized_dataloader(config, 'evaluation')(config, test_dataset, test_sampler, shuffle=False)
您好,我这边按照您提供的解决方案试了一下,还是有点问题。
方案一和方案二都可以对数据集进行构图,但是在模型训练 forward 的时候还是会出现 interaction
中没有 'x' 这个key。
调试了一下,发现 main 处理完数据集后没有调用到 RecBole-GNN-main\recbole_gnn\data\transform.py
文件,而这个文件是处理interaction
的。在最后一次Constructing session graphs 后代码会出现一个 WARNING :
02 Jun 09:35 INFO Reversing sessions. 100%|██████████| 76589/76589 [00:01<00:00, 61923.70it/s] 02 Jun 09:36 INFO Constructing session graphs. 100%|██████████| 76589/76589 [00:22<00:00, 3331.92it/s] 02 Jun 09:36 WARNING Equal transform 02 Jun 09:36 WARNING Equal transform 02 Jun 09:36 WARNING Equal transform 02 Jun 09:36 INFO [Training]: train_batch_size = [100] negative sampling: [None]
应该是这个 WARNING 中断了对 interaction
的处理。
您好,transform
的意思是在 DataLoader 里,把 Dataset 提供的 graph 建立 batch 的操作。
RecBole 的每个模型都会有自己的配置文件,GCE-GNN 对应的配置文件位置在 recbole_gnn/properties/model/GCEGNN.yaml
,您把这个文件里对应的配置也输进去应该就没问题了。
我复现时看到您的 main.py
里加载了 config_model.yaml
,就直接把 recbole_gnn/properties/model/GCEGNN.yaml
复制了一份变成了 config_model.yaml
,所以就没遇到这个问题,您可以把里面的参数加上试试。
嗯嗯,找到问题了,我的config_model.yaml
文件中缺少配置参数transform: sess_graph
这个配置参数。
感谢感谢!!!
您好,我在Recbole_GNN框架下运行自定义模型时报错【interaction中没有 x 这个key】 数据集和配置文件是CORE论文提供的。model 类中的myGCEGNN模型就是原GCEGNN模型,只是把代码复制出来命名model。 我调试了一下,发现main文件没有调用到 recbole_gnn\data\dataset.py 这个文件,这个文件是处理interaction的。
=== main文件代码 === from logging import getLogger from recbole.utils import init_logger, init_seed, set_color from recbole_gnn.config import Config from recbole_gnn.utils import create_dataset, data_preparation,get_model, get_trainer from model import myGCEGNN
if name == 'main':
configurations initialization