完全小白的pycharm深度学习调试+for循环断点条件设置
创始人
2025-05-31 19:46:05

完全小白的pycharm深度学习调试+for循环断点条件设置

  • 写在最前面
  • 基础方法
    • pycharm断点调试
    • 控制台输入
    • 代码中循环的debug方法
    • pycharm中图标的介绍
  • 常见的Bug
  • Debug经验
    • 1. 检查激活函数的输入值
    • 2. 检查梯度
    • 3. 消融实验
    • 4. 使用最短的时间
    • 5. 静下心来

写在最前面

之前把seq2seq+attention基础代码,从机器翻译迁移到文本摘要,再加上是自己的数据集,结果全显示截止符;
一方面可能是数据问题,一方面可能是我代码改错了,一方面可能是模型太基础了,一方面程序也没有报错;
所以排查起来很是头疼

一直尝试debug,但是百度不到类似的好方法,所以很是艰辛
今天很幸运的得到了实习的吕老师指点一二
特此记录,方便自己之后查询,也和大家分享一下,有好用的方法欢迎留言交流~

参考:https://zhuanlan.zhihu.com/p/62610785
https://blog.csdn.net/dong_liuqi/article/details/114980453

基础方法

断点调试,breakpoint。
在程序自动运行的过程中,程序只跑到你设置的断点位置处,则会中断下来,此时可以看到之前运行过的所有程序变量。

pycharm断点调试

点击行号后面区域,会出现一个红点,那个点就是设置的断点
在这里插入图片描述

下拉框选择当前.py文件后,点击小虫子图标,进入debug 模式
在这里插入图片描述
与正常的 run 去运行程序没很大差异
区别就是 pycharm 的控制台部分,从 run 跑到了 debug 显示。

并且可以显示所有的变量。
在这里插入图片描述

控制台输入

直接打印想要了解的张量or其他变量
在这里插入图片描述
将变量转为numpy,方便更直观的显示
在这里插入图片描述

命名为aa,显示在所有变量最前面(小细节太帅了)
如果是gpu跑的代码,记得加上cpu(),将数据转移到本机

aa = src.cpu().numpy()

在这里插入图片描述

前后区别对比
在这里插入图片描述
在这里插入图片描述
并且作为numpy变量,这个是实时变化的~
也可设置为监视对象

代码中循环的debug方法

想要i=3时停下来

方法一:新增判断语句,并对if的条件设置断点
在这里插入图片描述
方法二:断点右键设置条件
在这里插入图片描述
程序直接跳到i=3。简直完美

pycharm中图标的介绍

仅对常用的展开说明,其他的可通过鼠标悬停查看

一般操作步骤就是:
设置好断点,debug运行,
然后 F8单步调试,
遇到想进入的函数 F7 进去,
想出来在 shift + F8,
跳过不想看的地方,直接设置下一个断点,然后 F9 过去。

在这里插入图片描述

step over(F8快捷键):在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。在不存在子函数的情况下是和step into效果一样的。简单的说就是,程序代码越过子函数,但子函数会执行,且不进入。
在这里插入图片描述

step into(F7快捷键):在单步执行时,遇到子函数就进入并且继续单步执行,有的会跳到源代码里面去执行。
在这里插入图片描述

step into my code(Alt+Shift+F7快捷键):在单步执行时,遇到子函数就进入并且继续单步执行,不会进入到源码中。
在这里插入图片描述

step out(Shift+F8快捷键):假如进入了一个函数体中,你看了两行代码,不想看了,跳出当前函数体内,返回到调用此函数的地方,即使用此功能即可。
在这里插入图片描述
可输入表达式,然后进行evaluate
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Resume program(F9快捷键):继续恢复程序,直接运行到下一断点处。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常见的Bug

深度模型的Debug与一般程序的Debug有很大的不同。
一般程序的Debug通常可以通过简单地打断点调试出来,而深度模型通常会出现程序的所有模块都可以正常跑通,但就是模型效果与正常情况相去甚远,这种Debug就非常的困难.

对于大模型来说,一处"笔误"可能也会导致很大的问题。

  1. 某一部分参数梯度总为0
    可能是程序里存在"笔误", 有一部分的参量并没有加入模型中进行运算

  2. Loss不下降
    (未完待续)

Debug经验

1. 检查激活函数的输入值

使用Relu系的激活函数时, 如果输入激活函数前的数值异常大, 那么可能导致之后的结果出现问题.

使用Sigmoid时, 如果输入激活函数前的数值远远超出了其激活范围(即[-1,1]), 也可能导致训练出现严重问题.

2. 检查梯度

检查梯度是否消失
检查梯度是否爆炸

具体方法:直接输出各个参数的梯度

def _print_grad(self, model):'''Print the grad of each layer'''for name, parms in model.named_parameters():print('-->name:', name, '-->grad_requirs:',parms.requires_grad, ' -->grad_value:',parms.grad)

先输出该层参数是否存在梯度, 再输出梯度值. 这个函数应该放在梯度反向传播计算之后, 即loss.backward()之后.

3. 消融实验

如果一个深度模型中有多个模块, 可以使用消融实验的方法对每个模块进行测试.
这样可以先定位出问题出在哪个模块里, 即缩小bug的范围.
如果每个模块都有问题, 那么则应该去检查数据输入以及训练部分是否存在问题.

⭐️ 我觉得这各方法非常重要, 因为他能帮助定位bug的范围. 其实debug最大的难点就在于确定bug的位置.

4. 使用最短的时间

如果问题不是训练本身的精度不够等问题, 可以适当调整batch size的大小来加快训练.

这样可以提高debug效率.

5. 静下心来

遇到bug首先要静下心来想问题可能出现的地方, 然后一步步去排查.

最好是能将问题以及排查结果进行记录, 这样可以更好地分析问题所在.

切忌还没有想好问题就一遍遍地跑训练, 其实这样做是非常浪费时间的.

在很多次尝试后, 都没能够将bug排除也是很有可能遇到的事情, 这时候会非常烦躁, 不利于问题的分析. 建议先去完成其他的任务, 在冷静下来后再继续进行debug(本人亲测有效, 有时甚至第二天一开始就干掉了bug).

相关内容

热门资讯

什么是几九,几九是什么意思 极... 什么是几九目录什么是几九几九是什么意思今天是几九了啊,一九,二九,三九,四九,五九,是什么意思什么是...
东北都有什么特色小零食啊,东北... 东北都有什么特色小零食啊目录东北都有什么特色小零食啊东北特产零食东北特色小吃东北三省各自有什么特色零...
化妆棉的作用有哪些,化妆棉的作... 化妆棉的作用有哪些目录化妆棉的作用有哪些化妆棉的作用化妆棉有什么作用?化妆棉的作用有哪些 1....
六道有哪六道,火影忍者六道能力... 六道有哪六道目录六道有哪六道火影忍者六道能力六道轮回,都有哪六道?六道是指哪六道?六道有哪六道 ...
飞信手机多方通话怎么用(飞信手... 本篇文章极速百科给大家谈谈飞信手机多方通话怎么用,以及飞信手机好友收费吗对应的知识点,希望对各位有所...
会计中的流动资产包括哪些,下列... 会计中的流动资产包括哪些目录会计中的流动资产包括哪些下列会计科目中,属于流动资产的是(  )。会计基...
旺旺碎冰冰是什么梗的简单介绍 ... 本篇文章极速百科给大家谈谈旺旺碎冰冰是什么梗,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站...
怎样给芭比做衣服,给芭比娃娃做... 怎样给芭比做衣服目录怎样给芭比做衣服给芭比娃娃做衣服怎么做不用缝怎样帮芭比娃娃做衣服怎样给芭比做衣服...
如何区分,植物油,矿物油,白油... 本篇文章极速百科给大家谈谈如何区分,植物油,矿物油,白油,液蜡?,以及怎么区别植物油和矿物油对应的知...
武汉空气为什么那么差(为什么武... 本篇文章极速百科给大家谈谈武汉空气为什么那么差,以及为什么武汉空气质量这么差对应的知识点,希望对各位...
美国4大全尺寸皮卡之一,性能不... 本篇文章极速百科给大家谈谈美国4大全尺寸皮卡之一,性能不输福特猛禽,通用塞拉...,以及美国皮卡车品...
skp是啥(SKP是啥格式) ... 本篇文章极速百科给大家谈谈skp是啥,以及SKP是啥格式对应的知识点,希望对各位有所帮助,不要忘了收...
C1的教练资格证要怎么考,c1... C1的教练资格证要怎么考目录C1的教练资格证要怎么考c1教练资格证怎么考取怎么考c1汽车教练资格证?...
经典一词中的典是什么意思,经典... 经典一词中的典是什么意思目录经典一词中的典是什么意思经典的典是什么意思经典的典是什么意思?请问金典和...
什么叫做商,什么是商? 极速百... 什么叫做商目录什么叫做商什么是商?除法算式里的商是什么意思什么是商?什么叫做商 “商”的含义可...
柯南伦敦告白小兰是哪一集,名侦... 柯南伦敦告白小兰是哪一集目录柯南伦敦告白小兰是哪一集名侦探柯南哪集新一在伦敦向 小兰表白?名侦探柯南...
9个复韵母是哪9个韵母,六个单... 9个复韵母是哪9个韵母目录9个复韵母是哪9个韵母六个单韵母,九个复韵母,九个鼻韵母和十六个整体认读音...
如何去除猫尿味,怎样才能去除猫... 如何去除猫尿味目录如何去除猫尿味怎样才能去除猫尿的味道???并且让猫猫不会再乱尿?帮帮忙,如何去除猫...
吉他有多少和弦都是什么,吉他有... 吉他有多少和弦都是什么目录吉他有多少和弦都是什么吉他有多少和弦 都是什么吉他一共有多少和弦啊?听别人...
网上怎么订购好利来蛋糕(如何订... 本篇文章极速百科给大家谈谈网上怎么订购好利来蛋糕,以及如何订购好利来蛋糕对应的知识点,希望对各位有所...
杭州重点高中有哪些,杭州有哪些... 杭州重点高中有哪些目录杭州重点高中有哪些杭州有哪些重点高中杭州哪所高中最好杭州重点高中有哪些 ...
女为悦己者容意思,士为知己者死... 女为悦己者容意思目录女为悦己者容意思士为知己者死,女为悦己者容.是什么意思.女人无需为悦己者容悦人不...
北戴河是海吗 极速百科网 极速... 北戴河是海吗目录北戴河是海吗北戴河是海吗 北戴河是海。北戴河古称渝水,清光绪年间,因沙河流经戴...
外婆是什么样的关系,姥姥与我的... 外婆是什么样的关系目录外婆是什么样的关系姥姥与我的关系叫什么关系姥姥是指外婆还是奶奶??我与外婆是什...
头歌--第1关:Linux文件... 任务描述 假设系统中存在一个文件File,修改该文件的权限,根据实际需求...
【Spring从成神到升仙系列... 👏作者简介:大家好,我是爱敲代码的小黄,独...
梦见蜈蚣是什么意思,做梦梦见蜈... 梦见蜈蚣是什么意思目录梦见蜈蚣是什么意思做梦梦见蜈蚣什么意思梦见蜈蚣是什么意思,哪里有解释啊梦见蜈蚣...
小区车位比一般是多少,车库配比... 小区车位比一般是多少目录小区车位比一般是多少车库配比是什么小区总户数8200,总车位是1450个,配...
车锁上的lock什么意思,汽车... 车锁上的lock什么意思目录车锁上的lock什么意思汽车上lock是什么意思?车子上“lock标志”...
kirin710是什么处理器,... kirin710是什么处理器目录kirin710是什么处理器海思kirin710是高通多少?骁龙71...