深度学习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这样就可以轻松解决问题。

相关推荐
水如烟5 小时前
孤能子视角:“组织行为学–组织文化“
人工智能
大山同学5 小时前
图片补全-Context Encoder
人工智能·机器学习·计算机视觉
薛定谔的猫19825 小时前
十七、用 GPT2 中文对联模型实现经典上联自动对下联:
人工智能·深度学习·gpt2·大模型 训练 调优
壮Sir不壮5 小时前
2026年奇点:Clawdbot引爆个人AI代理
人工智能·ai·大模型·claude·clawdbot·moltbot·openclaw
PaperRed ai写作降重助手6 小时前
高性价比 AI 论文写作软件推荐:2026 年预算友好型
人工智能·aigc·论文·写作·ai写作·智能降重
玉梅小洋6 小时前
Claude Code 从入门到精通(七):Sub Agent 与 Skill 终极PK
人工智能·ai·大模型·ai编程·claude·ai工具
-嘟囔着拯救世界-6 小时前
【保姆级教程】Win11 下从零部署 Claude Code:本地环境配置 + VSCode 可视化界面全流程指南
人工智能·vscode·ai·编辑器·html5·ai编程·claude code
正见TrueView6 小时前
程一笑的价值选择:AI金玉其外,“收割”老人败絮其中
人工智能
Imm7776 小时前
中国知名的车膜品牌推荐几家
人工智能·python
风静如云6 小时前
Claude Code:进入dash模式
人工智能