文章目录
num_worker
在调试过程中,会保存一些中间变量的文件来判断代码是否写的正确。本人就遇到一个问题,想保存一帧输入的点云,在自己定义的dataset的getitem函数中在两个地方分别保存了该点云,分别命名为file1和file2(内容是一样的)。但在可视化的时候,这两个点云不重合,而且来自独立的两帧。为什么会出现这个问题?
在定义dataloader时,将num_workder设置为了4,也就是说在同一时刻,dataloader开了4个getitem函数,在执行getitem过后,就会出现file1和file2。但其实,一共生成了4个file1和4个file2,只不过保存名字是一样的,就会存在覆盖的情况。而由于4个getitem同时执行,在生成file1和file2的时候先后顺序情况很多,很容易file1和file2的最后版本是来自于不同的getitem函数的。这就造成了最后可视化是来自两帧点云。如果我们在保存文件时,将文件名加入getitem的传入参数index时,每个getitem生成的文件都不同,当执行完getitem时就会出现4个file1和4个file2。相对应的file1和file2则完全吻合。
所以,以后在调试程序的时候,务必注意num_workers的问题。
Optimizer
optimizer的定义一定要放在网络加载到cuda之后,否则,optimizer传入的网络的权重是cpu上的,对应反向传播的loss和梯度也是cpu上的。会出现在optimizer.step()过程会出现错误。
Debugging DataLoader Issues
本文探讨了在使用Dataloader进行调试时遇到的一个常见问题:当num_workers设置为大于1时,如何避免文件覆盖导致的数据不一致。文章详细解释了在多线程环境下,如果不合理地命名中间变量文件,会导致最终可视化数据混乱的现象,并给出了正确的解决方案。
503

被折叠的 条评论
为什么被折叠?



