深度学习pycharm debug

article/2025/6/24 17:30:07

深度学习中,Debug 是定位并解决代码逻辑错误(如张量维度不匹配)、训练异常(如 Loss 波动)、数据问题(如标签错误)的关键手段,通过打印维度、可视化梯度等方法确保模型正常运行、优化性能,贯穿开发全流程。

直接上实例以经典错误shape报错为例:

import torch
import torch.nn as nn
import torch.nn.functional as F# 模拟图像数据
x = torch.randn(8, 3, 64, 64)  # [B, C, H, W],batch size = 8# 模拟标签(分类任务)
labels = torch.randint(0, 5, (8,))  # 5 类问题,标签是 [8]# 模型定义
class BuggyNet(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)self.pool = nn.AdaptiveAvgPool2d((4, 4))  # 变成 [B, 32, 4, 4]self.linear = nn.Linear(32, 5)  # ❌ 故意设置错误 in_featuresdef forward(self, x):x = F.relu(self.conv1(x))        # [B, 16, 64, 64]x = F.relu(self.conv2(x))        # [B, 32, 64, 64]x = self.pool(x)                 # [B, 32, 4, 4]x = self.linear(x)               # ❌ 错误! x 是 4D,Linear 接受 2D 或 3Dreturn xmodel = BuggyNet()
criterion = nn.CrossEntropyLoss()# 前向传播
outputs = model(x)                  # 会报错
loss = criterion(outputs, labels)  # 不会执行到这里

首先设置断点:

然后进行debug右击:

 然后会出现控制台:

会出现变量和变量的信息(shape,值):

然后我们进行单步:

然后变量开始变化,当单步到24行时:

此刻x的shape是(8,32,4,4)但是在这个linear层

self.linear = nn.Linear(32, 5)  # ❌ 故意设置错误 in_features

期望输入是32,不仅维度不相同channel也不相同,所以继续单步会报错:

RuntimeError: mat1 and mat2 shapes cannot be multiplied (1024x4 and 32x5)

然后我们根据错误进行操作将x展平并且修改linear的输入:
x = x.view(x.size(0), -1)        # [8, 32*4*4] = [8, 512]
self.linear = nn.Linear(512, 5)  # ✅ 修复后的定义

import torch
import torch.nn as nn
import torch.nn.functional as F# 模拟图像数据
x = torch.randn(8, 3, 64, 64)  # [B, C, H, W],batch size = 8# 模拟标签(分类任务)
labels = torch.randint(0, 5, (8,))  # 5 类问题,标签是 [8]# 模型定义
class BuggyNet(nn.Module):def __init__(self):super().__init__()self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1)self.conv2 = nn.Conv2d(16, 32, kernel_size=3, padding=1)self.pool = nn.AdaptiveAvgPool2d((4, 4))  # 变成 [B, 32, 4, 4]self.linear = nn.Linear(512, 5)  # 此处修改def forward(self, x):x = F.relu(self.conv1(x))        # [B, 16, 64, 64]x = F.relu(self.conv2(x))        # [B, 32, 64, 64]x = self.pool(x)                 # [B, 32, 4, 4]x = x.view(x.size(0), -1)        # 此处修改x = self.linear(x)               return xmodel = BuggyNet()
criterion = nn.CrossEntropyLoss()# 前向传播
outputs = model(x)                  
loss = criterion(outputs, labels)  

然后我们这样就不会报错了。

很多时候缝合模块时就是经常遇见shape问题,耐性一点关注输入输出shape这样就可以轻松解决问题。


http://www.hkcw.cn/article/desgOhxMSV.shtml

相关文章

女研究生二次入伍再续海军梦 逐梦军营续写辉煌

女研究生二次入伍再续海军梦!在2025年春季入伍的新兵中,有一名特殊的“老兵”。她曾在海军某部服役两年,退伍后重返校园继续学业。如今已是研究生的她再次穿上海军军装,来到南部战区海军某训练基地,又一次成为了海军战士,踏上了二次入伍的军旅生涯。张玉玺于2020年9月第一…

尾号7个0的手机号拍出61.2万元 独特号码高价成交

一个尾号为七个零的手机号码使用权于6月1日以25万元底价起拍,共有13人参与竞拍。最终该号码以61.2万元成交。公告显示,截至4月23日,该号码无欠费,余额约9.14元,已办理4G全国流量王8元套餐,未绑定宽带,过户无预存话费要求,完成过户即可转网。目前,该号码使用权已被天津…

中国单方面免签“朋友圈”扩大 拉美五国加入免签行列

中国单方面免签“朋友圈”扩大 拉美五国加入免签行列。从6月1日起,巴西、阿根廷、智利、秘鲁、乌拉圭五个国家的持普通护照人员可以享受免签政策。这一政策试行期为2025年6月1日至2026年5月31日,期间这些国家的公民来华经商、旅游观光、探亲访友、交流访问或过境不超过30天,…

贝尔伯克当选联大主席 大V解读 女性力量再添一笔

6月2日,德国前外长贝尔博克当选为第80届联合国大会主席,成为第五位担任此职位的女性。联合国大会以167票赞成通过了安娜莱娜贝尔博克出任下一任主席的决定。贝尔博克对此表示非常感激,并承诺将通过“基于信任的对话”为大家服务。她宣称自己的目标是减少冗余、提高透明度,并…

上海游客“表扬帖”走红网络 感谢信点赞厦门辅警

上海游客“表扬帖”走红网络 感谢信点赞厦门辅警!一篇饱含深情的表扬贴在小红书上迅速走红,网友查女士诚挚地感谢了一位帮助她的厦门辅警。厦门双子塔上灯光轮滚播放着连续七届获选文明城市的信息,这是每一位厦门人共同努力、团结一致的结果。5月25日中午11点多,上海游客查…

如何评估 RAG 的分块Chunking策略

如何评估 RAG 的分块策略 我对 RAG(检索增强生成模型)进行了深入研究,深知分块在任何 RAG 流水线中都至关重要。 我接触过的许多人坚信更好的模型能够提升 RAG 的性能。有些人则对向量数据库寄予厚望。即便那些认同分块重要性的人&#xff…

贪心算法应用:顶点覆盖问题详解

贪心算法应用:顶点覆盖问题详解 贪心算法是解决顶点覆盖问题的经典方法之一。下面我将从基础概念到高级优化,全面详细地讲解顶点覆盖问题及其贪心算法解决方案。 一、顶点覆盖问题基础 1. 问题定义 顶点覆盖问题(Vertex Cover Problem&am…

代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、栈与队列总结

150. 逆波兰表达式求值--后缀表达式 力扣题目链接(opens new window) 根据 逆波兰表示法,求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给…

女童玩的气球突然爆炸 静电引发惊魂一刻

一位江苏宝妈在六一儿童节前发布了一段视频,提醒家长们不要给孩子买氢气球玩。她描述了自己孩子遇到的一次危险情况:气球突然爆炸,孩子的后脑勺头发被烧焦了一层,手臂上的汗毛也被烧掉了。事发时,这位宝妈正在给孩子喂食鸡腿,突然听到“嘭”的一声,气球在孩子身后爆裂,…

Ubuntu安装CH340驱动教程

Ubuntu22.04安装CH340驱动 3.1 用lsusb查看USB 插上CH340之前 插上CH340之后 输出中包含ID 1a86:7523 QinHeng Electronics CH340 serial converter的信息,这表明CH340设备已经被系统识别。 3.2 查看USB转串口 ls -l /dev/ttyUSB0/dev下没有该设备节点。 用dme…

新人雨中骑“鸡动车”去结婚 创意婚礼引关注

6月1日,在合肥渡仙桥路上,一对新人以独特的方式前往婚礼现场。他们没有选择豪华婚车,甚至没有开车,而是骑着小鸡造型的两轮电动车赶往婚礼现场。这对新人表示,看到这种小鸡造型的电动车觉得很漂亮,便决定用它作为婚车。视频中,这支婚车车队虽然数量不多,但在路上格外显…

上海迪士尼打架事件后续 因拍照引发冲突

5月31日,有网友发布视频称,在上海迪士尼乐园内一对情侣和一家三口发生了冲突。视频中可以看到双方在现场扭打,周围游客纷纷上前劝阻。6月1日,当地相关部门透露,该事件发生在5月31日下午,在迪士尼疯狂动物城的一处拍照打卡点,双方因拍照问题发生争执,随后演变成肢体冲突…

【Python连接数据库基础 02】SQLAlchemy核心实战:SQL表达式构建与执行完全指南

【Python连接数据库基础 02】SQLAlchemy核心实战:SQL表达式构建与执行完全指南 关键词:SQLAlchemy Core、SQL表达式、数据库查询、Python ORM、表达式语言、数据库操作、查询构建、SQLAlchemy教程 摘要:本文深入讲解SQLAlchemy Core的核心功能…

台湾一大学生暗网贩毒被捕 涉案金额超7亿

美国联邦调查局近日破获了暗网毒品交易平台“隐身市场”,该平台的经营者“法老”被发现是24岁的台湾大学资管系学生林睿庠。林睿庠通过贩毒积累了大量财富,三年多时间里非法所得超过1亿美元。林睿庠于2024年5月18日在美国被捕,并面临四项罪名指控,一旦定罪将面临至少终身监…

数据库系统概论(十四)详细讲解SQL中空值的处理

数据库系统概论(十四)详细讲解SQL中空值的处理 前言一、什么是空值?二、空值是怎么产生的?1. 插入数据时主动留空2. 更新数据时设置为空3. 外连接查询时自然出现 三、如何判断空值?例子:查“漏填数据的学生…

我国代表反驳对华无端指责:无中生有 颠倒黑白 贼喊捉贼

我国代表反驳对华无端指责。5月31日,参加第22届香格里拉对话会的中国代表团团长、中国人民解放军国防大学副校长兼教育长胡钢锋出席《亚太地区海事安全合作》特别论坛,并阐述中方观点。他首先反驳了当天上午大会发言中涉及中方的内容。他表示,我们不接受对中方的无端指责,有…

喊话万科,74岁的王石难有“真还传” 万科面临转型挑战

喊话万科,74岁的王石难有“真还传” 万科面临转型挑战。对于如今的万科来说,他们需要的是“化腐朽为神奇”的钞能力,而不是“剪刀手”。近期地产圈和网络上热议的话题是,如果王石重新回归万科,是否会有奇迹发生。5月27日,万科创始人王石在朋友圈发布了一则长文,表示正在…

国际组织:美债务飙升不仅危及自身更可能引发全球债券市场危机

国际组织:美债务飙升不仅危及自身。5月31日报道,国际金融协会最近的一份报告警告,美国债务飙升的影响不仅限于国内经济,更可能引发全球债券市场危机。报告显示,一些国家的借贷成本往往与美国国债同步变动,这意味着美国国债的波动将对其它债务产生连锁反应。报告写道,“由…

一句古语看懂中方如何应对抹黑!

一句古语看懂中方如何应对抹黑。第22届香格里拉对话会闭幕了这期间,谭主在香会现场看到了美菲防长的无理挑衅甚至连中国记者都变成了菲防长口中的“特工”这说明他们急了,为什么?一句古语看懂中方如何应对抹黑责任编辑:0882

005-C/C++内存管理

C/C内存管理 1. C/C内存分布 栈–存储非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信(这是系统部分的知识…