首先CSDN有两篇踩坑记录,但是有部分情况和我的不一样,所以这里来记录下。这两篇的地址我放最后,也是感谢他们的分享。
0.环境准备注意事项
之所以写个0的注意事项,是因为在下面的踩坑的过程中,发现有些原因是因为torch和python版本太新导致的。感觉如果python版本在3.8和3.9,torch在1.8和1.9左右应该是没问题,这个有空我再去验证下。
1.评价指标报错
File “/home/amax/anaconda3/envs/haha/lib/python3.9/site-packages/torchmetrics/metric.py”, line 145, in init
raise ValueError(f"Unexpected keyword arguments: {', '.join(kwargs_)}")
ValueError: Unexpected keyword arguments: compute_on_step
这个在其他分享里面是把torchmetrics这个库降版本,但我这里torchmetrics用的是新版,因为我其他项目也要用到。
def __init__(self,
compute_on_step:bool = True,
dist_sync_on_step = False,
process_group: Optional[Any] = None,
dist_sync_fn: Callable = None) -> None:
super(FDE, self).__init__(compute_on_step=compute_on_step, dist_sync_fn=dist_sync_fn, process_group=process_group, dist_sync_fn=dist_sync_fn)
所以需要在fde.py、ade.py、mr.py直接文件中,修改super方法,以FED.py为例。上面是FDE.py原本的代码,我们把下面的super里面的compute_on_step删掉,就好了,如下所示。记得mr.py和ade.py里面也这么做
def __init__(self,
compute_on_step:bool = True,
dist_sync_on_step = False,
process_group: Optional[Any] = None,
dist_sync_fn: Callable = None) -> None:
super(FDE, self).__init__(dist_sync_fn=dist_sync_fn, process_group=process_group, dist_sync_fn=dist_sync_fn)
2.TypeError: TemporalData.__inc__() takes 3 positional arguments but 4 were given
运行eval.py之后报这个错
百度看了看,github也看了,基本都是说PyG,也就是torch-geometric的问题,但是试了几个版本都不太行,太老的版本会导致装不上torch_parse这个库
最后的解决办法是,点报错的最后一个文件地址,会进入到collate.py文件。
报错显示的是data.__inc__(key, value, store)这一行代码,如果是用PyCharm可以按着ctrl+鼠标左键,VSCode好像也是这样。然后出现下图这样
选择第一个,进入到utils.py,我们把54行代码改成下图所示
我是在value的后面加上了 ,*args
如果在编辑的时候显示这个,提示,直接点OK就行
3.TypeError: TemporalEncoderLayer.forward() got an unexpected keyword argument 'is_causal'
遇到这个问题是pytorch版本太新,我对比了下torch 2.0.1和torch 1.8.1,在torch.nn. module.transformer这个类里面
for mod in self.layers:
output = mod(output, src_mask=mask, is_causal=is_causal, src_key_padding_mask=src_key_padding_mask_for_layers)
的这一行代码中,torch2.0.1是有is_causal = is_causal这个参数的,torch1.8.1则没有,所以要不降级,要不编辑torch的源代码。
感谢:
感谢下面多位大佬的踩坑与分享