当前位置: 首页 > article >正文

深度学习pycharm debug

深度学习中,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.lryc.cn/news/2397429.html

相关文章:

  • MicroPython+L298N+ESP32控制电机转速
  • Hive的存储格式如何优化?
  • 在部署了一台mysql5.7的机器上部署mysql8.0.35
  • OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()
  • QT入门学习(一)---新建工程与、信号与槽
  • UE5.4.4+Rider2024.3.7开发环境配置
  • Windows环境下PHP,在PowerShell控制台输出中文乱码
  • 第2篇:数据库连接池原理与自定义连接池开发实践
  • 性能优化 - 理论篇:性能优化的七类技术手段
  • 华为IP(7)
  • AIGC与影视制作:技术革命、产业重构与未来图景
  • spring-cloud-alibaba-sentinel-gateway
  • Cursor 玩转 腾讯地图 MCP Server
  • 【HarmonyOS 5】 ArkUI-X开发中的常见问题及解决方案
  • 2025年中国电商618年中大促策略分析:存量博弈与生态重构
  • Deepseek给出的8255显示例程
  • React+Antd全局加载遮罩工具
  • Qt OpenGL 光照实现
  • 智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会
  • Rust: CString、CStr和String、str
  • 力扣每日一题——连接两棵树后最大目标节点数目 ||
  • 【学习笔记】Sparse Crosscoders for Cross-Layer Features and Model Diffing
  • VSCode无法转到定义python源码(ctrl加单击不跳转)
  • 【华为战报】4月、5月 HCIP考试战报!
  • 开发指南120-表格(el-table)斑马纹
  • 数字化转型全场景安全解析:从产品到管理的防线构建与实施要点
  • AIGC工具平台-GPT-SoVITS-v4-TTS音频推理克隆
  • el-table配置表头固定而且高度变化
  • 设计模式——组合设计模式(结构型)
  • PostgreSQL 在生物信息学中的应用