Closed sorryhorizonTT closed 5 months ago
应该是可以实现的。你输入超参-restore -epoch 0
,然后把超参name
输入为你之前的实验记录完整名称,记得把后面的时间戳也加上
显示加载成功之后,代码中的model是否意味着已经是我选择加载的了?
如果显示成功加载了,那应该是没问题了。检查下测试结果,如果是没有训练过的model,肯定没有办法有比较好的测试结果
那另外请问下,在代码当中有没有类似对三元组的头或者尾做mask的操作,来进行预测的代码,读取被mask的数据进行后续操作的
现有代码就是只输入头实体或尾实体+关系,预测另一个实体。也就是说在处理数据的时候,就只读入单个实体+关系。而至于具体的mask操作,代码里应该没有涉及
也就是说读取的三元组并不是完整的,对应的是predict部分的代码么
另外学长,我在复现COMPGCN也就是您参考的模型的时候,我所有的库版本都是按照他的需求提供的下载的,但是调试了半天会报一下的错误,尝试了很多办法没有解决,学长有遇到过么
也就是说读取的三元组并不是完整的,对应的是predict部分的代码么
这个我记得是在一开始读入的是完整的三元组,只不过是只取了单个实体和关系进行后面的操作。
另外学长,我在复现COMPGCN也就是您参考的模型的时候,我所有的库版本都是按照他的需求提供的下载的,但是调试了半天会报一下的错误,尝试了很多办法没有解决,学长有遇到过么
抱歉,这个错误我没有遇到过。你是用conda环境吗?看你的pycharm设置里,指定interpreter的似乎不是conda环境。
好的谢谢学长,没有用conda环境,conda上面scikit-learn的包下载不下来,不知道是不是版本太旧了
这我就不太清楚了,CompGCN的代码我很早之前跑过,那时候是可以成功运行的
那学长的安装包都是根据requirement安装的么,python用的是什么版本吖,另外我利用python run.py -restore -epoch 0 -name test_fb_07_04_2024_18_42_27 -model ragat -score_func interacte -opn cross -gpu 0 -data MYD7 -gcn_drop 0.4 -ifeat_drop 0.4 -ihid_drop 0.3 -batch 1024 -iker_sz 9 -attention True -head_num 2命令运行,它显示加载成功,并且在测试集上运行,我现在是想利用这个模型去做补全,我如何操作才能读取到这个模型,比如我用的如下代码file_path = "path_to_your_file.txt" # 指定文件路径 top_k = 3 # 希望得到的前几个补全结果
with open(file_path, 'r') as file: for line in file: incomplete_triple = tuple(map(int, line.strip().split('\t'))) top_k_predictions = model.predict_top_k(incomplete_triple, top_k) print("Incomplete Triple:", incomplete_triple) print("Top {} Predictions:".format(top_k), top_k_predictions)这段代码中的model如何与我想要启动的model对齐,我没有摸索到
预测时用到的model是python class实例化的对象,你只需要保证这个model里面的在初始化__init__
里定义的网络参数都是加载的训练好的PyTorch参数即可。我建议你在IDE里面调试下,检查model的参数是否成功加载。
那我再尝试下,另外想请问学长在复现COMPGCN的时候可以利用GPU加速么
COMPGCN可以用GPU的
学长 我想请问下,您训练数据得到的最优参数是利用统一 的最优参数么,还是说模型的一开始参数是一默认值,然后经过训练集,参数会进行变化,直到找到最优的参数集合;我现在疑惑的是单纯的将数据集替换成自己的数据集,得到的参数集合是适用于自己数据集的最优参数集合么。另外checkpoints下的文件格式无法显示,里面的内容对应的就是训练后得到的最优模型参数么
model参数当然是随机初始值经过训练之后更新迭代的参数。checkpoints参数文件当然没法打开,它对应由训练过程在验证集上找到的最好效果时保存的模型参数。
那意思就是当我在终端输出您提供的命令运行run.py得到的checkpoints都是针对自己数据的最优模型参数么,另外load_path和save_path这两个路径一样嘛,我如果在代码中实现torch.load以前的模型,对应的是checkpoints下的路径么
是的,run.py里面保存的checkpoints应该都是最优参数。load_path是用来加载初始参数的,save_path是保存新训练出来的参数的。
学长这个是我跑出来的验证集上的MRR的变化,学习率改变基本也都是微小的变化,用最优的参数跑出来基本这就是最好的,我想请教下可以微调模型的什么部分或者增添某些元素稍微提升性能么
你用的是自己的数据集是吗?
是的 是自己处理的数据集 可能相对来说结构简单 感谢学长 我再摸索摸索
学长这个两层卷积代码是不是已经提供了,只需要修改gcn_layer的值为2就可以实现两层GNN?我修改了输入的超参,加大了batch_size的大小,跑了2000轮,效果不如之前,另外请问下python run.py -epoch 1500 -name test_fb -model ragat -score_func interacte -opn cross -gpu 0 -data MYD7 -gcn_drop 0.4 -ifeat_drop 0.4 -ihid_drop 0.3 -batch 1024 -iker_sz 9 -attention True -head_num 2命令行最后的head_num和代码当中的超参 输入head_num会相互影响么
-gcn_layer 2
命令就代表了会用到两层的GCN,它也有个默认值head_num
代码里面的default值,是当你没有在命令行指定新值的时候会用的默认值。如果你在命令行设定了新的值,head_num
也会改变我想请问学长对两个标准数据集的编码有所了解么,模型所读取的数据是只要三元组形式就可以读入,然后会自动编码么,我如果把我的数据添加更多的信息,然后进行编码会不会对性能有所影响
现在的处理方式是,对原始文件中的三元组,实体和关系会被编码为0,1,2等,然后进入GNN。原来的实体命名和关系命名等信息是没有使用的
就是我现在的想法是通过语义增强来看看能不能提升性能,我想将描述实体的额外信息通过bert或其他模型先进行编码,获得编码好的三元组,然后再提供给RAGAT,但是我进行编码过后的三元组经过模型还会被模型进行索引等一系列操纵,那是否会覆盖掉语义信息?我是要把编码器整体替换掉才能实现语义增强的作用么,我想请教下学长的看法。
RAGAT的原始实现是忽略了语义信息。你如果想通过先编码了语义之后,再提供给GNN。可以考虑把现在的embedding层替换掉,从随机初始化换为你的语义编码后的embedding,之后再进行GNN。这种方法我记得在其它方法上是有实现的,你可以调研下
那我可以处理的简单一些么,我先预训练我的词嵌入,将实体和他的描述先进行嵌入整合,然后再随机初始化编码,不改变模型本身这样的操作会有意义嘛,替换掉现有的embedding层可能操作起来有点难度
那你的词嵌入怎么样和现有的embedding融合呢
那我要想实现就是要替换掉rel_transform这部分内容么
只要保证你的语义embedding,和现有的relation embedding融合,然后一起放入GNN即可
好的 我尝试尝试
在对实体进行嵌入初始化的时候,是没有区分头尾实体么,完成嵌入之后卷积是会自己识别到头尾实体然后添加在合适的位置嘛
还有个疑惑就是嵌入随机初始化对应的是self.init_embed = get_param((self.p.num_ent, self.p.init_dim))这个么,我是否改变self.init_embed的定义方式就可以,另外添加索引的操作和嵌入的过程会影响么,是同时进行的还是有先后顺序的?
学长知道这个GPU内存很高,但是利用率一直是0或者1,就几乎没有,这个会影响结果么,或者说哪里出了什么问题么
抱歉,我没怎么用windows环境下做过实验
学长我想请问下,训练过后的模型如何重新加载出来,加载出来我如果想利用去进行残缺三元组的预测,输出可能的结果,能够实现么