pytorch训练遇到的问题

1.RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 8.00 GiB total capacity; 6.14 GiB already allocated; 12.05 MiB free; 6.27 GiB reserved in total by PyTorch)

我是在训练代码的网络前加上with torch.no_grad(),如下:

        with torch.no_grad():
            y1 = net(images)

with torch.no_grad - disables tracking of gradients in autograd.
model.eval() changes the forward() behaviour of the module it is called upon
eg, it disables dropout and has batch norm use the entire population statistics

model.eval()和with torch.no_grad()的区别

在PyTorch中进行validation时,会使用model.eval()切换到测试模式,在该模式下,

主要用于通知dropout层和batchnorm层在train和val模式间切换
在train模式下,dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); batchnorm层会继续计算数据的mean和var等参数并更新。
在val模式下,dropout层会让所有的激活单元都通过,而batchnorm层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。
该模式不会影响各层的gradient计算行为,即gradient计算和存储与training模式一样,只是不进行反传(backprobagation)
with torch.no_grad()则主要是用于停止autograd模块的工作,以起到加速和节省显存的作用,具体行为就是停止gradient计算,从而节省了GPU算力和显存,但是并不会影响dropout和batchnorm层的行为。
原文链接:https://blog.csdn.net/songyu0120/article/details/103884586

2.RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn

出现这种问题是因为我们需要对变量求梯度,但是系统默认的是False, 也就是不对这个变量求梯度。解决方法:loss.requires_grad = True

        with torch.no_grad():
            y1 = net(images)
        loss_c, loss_s, loss = criterion(y1, labels, training_mask)
        # Backward
        loss.requires_grad = True
        optimizer.zero_grad()
        loss.backward()

参考:https://blog.csdn.net/CVAIDL/article/details/106363761?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

3.train.py:182: UserWarning: volatile was removed and now has no effect. Use with torch.no_grad(): instead.

targets = [Variable(ann.cuda(), volatile=True) for ann in targets]

改成

            with torch.no_grad():
                targets = [Variable(ann.cuda()) for ann in targets]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch训练模型时暂停的问题可能有多种原因。根据引用和引用的描述,这个问题可能是由于训练过程中的互锁、内存问题或者多进程导致的。引用提供了一些解决方案,可以根据具体情况进行分析和尝试。 其中一个可能的原因是前一进程还未处理完,又进入下一个导致互锁。解决方法是在每个Epoch后,或每个batch后暂停一下,可以使用time.sleep(0.003)来添加一个短暂的延迟。 另一个可能的原因是内存问题。这可能是由于训练数据量过大,导致内存不足。可以尝试使用开关pin_memory=True/False来调整内存使用情况。 还有一个可能的原因是多进程导致的互锁问题。可以尝试减少进程数或者不使用多进程,通过将num_workers设置为0或1来解决。 此外,还可能出现OpenCV与PyTorch之间的互锁问题。可以尝试调整batch size的设置,以减少内存使用量。 总之,根据引用中提供的解决方案,可以根据具体情况来分析和尝试解决PyTorch训练模型暂停的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [在PyTorch训练一个epoch时,模型不能接着训练,Dataloader卡死](https://blog.csdn.net/m0_59023219/article/details/130922862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [PyTorch 训练时中遇到的卡住停住等问题](https://blog.csdn.net/yyywxk/article/details/106323049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值