模型训练显存爆炸解决方法

在模型训练中,应该理解梯度、反向传播、图层、显存这些概念,在模型训练过程中,一般会分为训练+验证+测试 ,在这些过程中,一般在训练过程中会比较占用显存,因为涉及到反向传播,需要大量的梯度,这些数据又存放在显存中。
在今天模型的训练中,突然发现可以训练,但是在验证过程中出现显存爆炸炸,提示我显存不足,我就很纳闷,一直在找问题,终于发现了:

在我的训练代码中:

   for epoch in range(0, epoch_num):net.train()for i, data in enumerate(train_dataloader):ite_num = ite_num + 1inputs, labels = data['image'], data['maskl']inputs = inputs.type(torch.FloatTensor)#注意第1行labels = labels.type(torch.FloatTensor)#注意第2行# wrap them in Variable:if torch.cuda.is_available():input, label = Variable(inputs.cuda(), requires_grad=False), Variable(labels.cuda(), requires_grad=False)#注意第3行else:input, label = Variable(inputs, requires_grad=False), Variable(labels, requires_grad=False)#注意第4行optimizer.zero_grad() pred = net(input)loss = dice_bce_loss_fusion(pred,label)loss.backward() optimizer.step() running_loss += loss.data.item()#注意第5行del d0,loss

**分宜以上代码,我通过print(loss.requires_grad)发现loss是有梯度的,但是我在累加的时候用了loss.data.item(),这样就减小了显存的占用量,且使用了del loss,但是我的验证代码中,没有使用loss.data.item()**和d0,导致在验证时出现显存爆炸。
在模型训练过程中,应该知道训练和验证的交替:

# evaluate model:
model.eval()#切换到验证
with torch.no_grad():#注意这一行,使得在内的所有参数均没有梯度,加快模型的训练与验证...out_data = model(data)#数据是没有梯度的# training step
model.train()#恢复模型训练...

以上就是解决在验证时报出显存爆炸的解决方法,特此记录一波。

关于模型训练中显存占用过大的或直接报显存爆炸的解决方法相关推荐

  1. 模型训练中_pickle.PicklingError: Can’t pickle问题解决办法

    模型训练中_pickle.PicklingError: Can't pickle问题解决办法 一.问题描述 二.解决办法 欢迎学习交流! 邮箱: z-@1-6.com 网站: https://zeph ...

  2. FCN模型训练中遇到的困难

    FCN模型训练中遇到的困难 标签: 深度学习FCN神经网络caffe 2017-02-24 10:54 2675人阅读 评论(6) 收藏 举报  分类: 深度学习(18)  版权声明:本文为博主原创文 ...

  3. ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签

    ML之FE:在模型训练中,仅需两行代码实现切分训练集和测试集并分离特征与标签 目录 仅需两行代码实现切分训练集和测试集并分离特征与标签 输出结果 实习代码 仅需两行代码实现切分训练集和测试集并分离特征 ...

  4. php怎么会占用磁盘,window_win10占用硬盘高怎么办?win10磁盘占用率达100%解决方法,  win10占用硬盘高怎么办呢? - phpStudy...

    win10占用硬盘高怎么办?win10磁盘占用率达100%解决方法 win10占用硬盘高怎么办呢?很多升级为win10的用户都出现了win10系统磁盘占用率50%或100%的情况,这样让系统的运行速度 ...

  5. zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法

    转载自:http://blog.csdn.net/wide288/article/details/21622183 zend studio中ctrl+鼠标左键无法转到类或函数定义文件的解决方法:  z ...

  6. Python中 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape错误解决方法

    Python中 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape错误解决方法: ...

  7. android studio 导入模块SDK 以及该模块中继承application的类与原工程继承application的类存在冲突 解决方法

    android studio 导入模块SDK 以及该模块中继承application的类与原工程继承application的类存在冲突 解决方法 导入某修改后的海康视频SDK(老师给的),并修改相关文 ...

  8. PADS使用过程中出现“发生严重的运行错误,请按“确认”关闭程序”的解决方法

    PADS使用过程中出现"发生严重的运行错误,请按"确认"关闭程序"的解决方法 在使用Ruter的时候,一旦按下保存就会弹出此窗口,刚开始以为是DRC报错太多了, ...

  9. python查看显存占用情况以及使用numba.cuda释放显存

    一.python查看显存占用情况 # pip install pynvml def nvidia_info():nvidia_dict = {"state": True," ...

最新文章

  1. LeetCode简单题之旅行终点站
  2. 岛国科普第2弹-再造人类生命的神奇细胞Human.Life.Our.Amazing.Cell
  3. 易宝典——玩转O365中的EXO服务 之四十 创建就地电子数据展示搜索
  4. 文献记录(part78)--Structure-Constrained Low-Rank Representation
  5. C# 结合 Golang 开发
  6. jQuery Mobile弹出对话框后不刷新原页面,保持原页面内容不变
  7. 关于T4,正在发生的...
  8. 增加数据_数据来了!集装箱运量猛增,到底增加了多少!?
  9. [转】Python--遍历列表时删除元素的正确做法
  10. android res目录下存放图片文件夹 i m h xh xxh
  11. 在Linux上安装IDA的命令,Linux安装IDA神器
  12. git分支详细讲解,模拟分支开发,为什么使用分支开发
  13. Oracle 创建用户为什么要加C##
  14. plsql 通过 excel 创建表
  15. BlackBerry Internet Service故障:公司内部同事无法互通邮件,对外联络没有问题
  16. java基于ssm+jsp的抑郁症心理健康科普交流网站
  17. ultrascale和arm区别_ZYNQ UltraScale+ MPSoc FPGA初学笔记
  18. 数据库——彻底明白超键、候选键、主键、外键
  19. UI交互设计:红绿立体图片的制作
  20. Java中Map集合中的Entry对象

热门文章

  1. 在科研路上,大家有什么经验教训?
  2. 导轨电表、万用表、计量插座、工控物联网、学习机、仪器仪表等低功耗高抗干扰段码屏LCD液晶显示驱动IC-VK2C22A/B LQFP52/48,完全兼容替代16C22,44*4/40*4显示
  3. CY68013 FPGA通信联调总结
  4. 在线生成网址二维码的API接口
  5. 计算机编程国际赛事,中小学生学习C++编程可以参加的赛事
  6. 都雪冬 20190919-2 功能测试
  7. 基于java的搜索引擎的设计与实现
  8. Only Train Once!微软浙大提出剪枝新框架OTO:无需微调即可获得轻量级架构!
  9. MTK-手机锁等相关密码配置
  10. 存储的控制器冗余与多路径