【深度学习】调试代码踩坑

文章目录

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()过程会出现错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值