深度学习pycharm debug

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

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

python 复制代码
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_features

    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 = self.linear(x)               # ❌ 错误! x 是 4D,Linear 接受 2D 或 3D
        return x

model = 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) # ✅ 修复后的定义

python 复制代码
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 x

model = BuggyNet()
criterion = nn.CrossEntropyLoss()

# 前向传播
outputs = model(x)                  
loss = criterion(outputs, labels)  

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

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

相关推荐
CODECOLLECT几秒前
技术解析|MDM移动设备管理系统无终身买断制度的底层逻辑
人工智能
北京迅为5 分钟前
《【北京迅为】itop-3568开发板NPU使用手册》- 第 7章 使用RKNN-Toolkit-lite2
linux·人工智能·嵌入式·npu
我是一只puppy11 分钟前
使用AI进行代码审查
javascript·人工智能·git·安全·源代码管理
阿杰学AI12 分钟前
AI核心知识91——大语言模型之 Transformer 架构(简洁且通俗易懂版)
人工智能·深度学习·ai·语言模型·自然语言处理·aigc·transformer
esmap14 分钟前
ESMAP 智慧消防解决方案:以数字孪生技术构建全域感知消防体系,赋能消防安全管理智能化升级
人工智能·物联网·3d·编辑器·智慧城市
LaughingZhu19 分钟前
Product Hunt 每日热榜 | 2026-02-08
大数据·人工智能·经验分享·搜索引擎·产品运营
芷栀夏28 分钟前
CANN ops-math:筑牢 AI 神经网络底层的高性能数学运算算子库核心实现
人工智能·深度学习·神经网络
用户51914958484529 分钟前
CVE-2025-47812:Wing FTP Server 高危RCE漏洞分析与利用
人工智能·aigc
阿里云大数据AI技术33 分钟前
【AAAI2026】阿里云人工智能平台PAI视频编辑算法论文入选
人工智能
玄同76535 分钟前
我的 Trae Skill 实践|使用 UV 工具一键搭建 Python 项目开发环境
开发语言·人工智能·python·langchain·uv·trae·vibe coding