bys0318 / SQUIRE

EMNLP 22' (Oral): SQUIRE: A Sequence-to-sequence Framework for Multi-hop Knowledge Graph Reasoning
31 stars 5 forks source link

为什么在跑test时会报错 #7

Closed HappyCpp closed 1 year ago

HappyCpp commented 1 year ago

错误代码 RuntimeError: Error(s) in loading state_dict for TransformerModel: size mismatch for encoder.weight: copying a param with shape torch.Size([15021, 256]) from checkpoint, the shape in current model is torch.Size([13646, 256]). 训练完进行测试为什么会显示大小不对呢

bys0318 commented 1 year ago

请问你是在哪个数据集上训练和测试的呢?报错信息看起来你是在FB15K237上训练,然后在FB15K237-20上进行evaluation的,这样因为FB15K237和FB15K237-20两个数据集中的实体个数不一致,会造成encoder.weight矩阵的shape对应不上——所以请保持训练与测试在同一个数据集上。

HappyCpp commented 1 year ago

嗯嗯明白了,想问一下这个除了FB15K237的其他数据集在test时候的ckpt该怎么选择呢

bys0318 commented 1 year ago

test时候只需要把命令“CUDA_VISIBLE_DEVICES=0 python train.py --test --dataset FB15K237 --beam-size 256 --save-dir "model_1" --ckpt "ckpt_30.pt" --test-batch-size 8 --encoder --l-punish --no-filter-gen”中的--dataset FB15K237换成数据集的名称就可以了(注意--save-dir和--ckpt要与你训练时保存的模型路径一致)。--beam-size也是可以调的超参,这个可以按照论文附录里设置来复现文章汇报的效果。

HappyCpp commented 1 year ago

明白了,谢谢大佬解答