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

pytorch中的几个概念

几个容器:

nn.Sequential

nn.ModuleList

nn.ModuleDict

单个容器都会将变量加入parameter中,进行追踪和更新

区别:Sequential 不 用定义forward,会自动顺序执行各个子模块

        ModuleList和ModuleDict不会自动forward,需要子定义forward顺序,所以需要自定义继承至nn.Module的类,实现forward

model.modules() 递归的显示所有模块

model.named_modules() 递归的显示所有模块,生成器的元素是(name,param)

model.children() 子模块,子模块内部的细节不显示

model.named_children() 子模块

model.parameters() 显示所以参数,只显示tensor

model.named_parameters() 显示带名称的tensor,

注意梯度在tensor.glad中,需要进行backward()后才会有梯度值,不然都是None。

  • 必须在执行loss.backward()后才有梯度值4
  • 执行optimizer.step()后梯度会被清零

检查未更新参数(调试用) 用于排查梯度消失/爆炸问题

loss.backward()
unupdated = []
for name, param in model.named_parameters():if param.grad is None:unupdated.append(name)
print(f"未更新参数: {unupdated}")

使用torch.no_grad()可避免不必要的梯度计算和存储:

with torch.no_grad():    # 显存优化关键:ml-citation{ref="8" data="citationList"}outputs = model(inputs)
状态含义常见原因
Tensor有效梯度正常反向传播
None无梯度未执行backward或参数冻结2
全0梯度消失网络结构或初始化问题

梯度裁剪‌:防止爆炸

torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

显存监控‌:

print(torch.cuda.memory_allocated())  # 查看当前显存占用

 通过.grad查看梯度是核心方法,结合named_parameters()可定位到具体层34。分布式训练需设置find_unused_parameters=False确保完整检测2。

相关文章:

  • 剑指offer48_两个链表的第一个公共节点
  • Node.js特训专栏-实战进阶:10.MongoDB文档操作与聚合框架
  • 创建套接字时和填充地址时指定类型的异同
  • Color Hunt - 简约漂亮的配色网站
  • 华为云鸿蒙应用入门级开发者认证 实验部分题目及操作步骤
  • CCleaner Pro v6.29.11342 绿色便携版
  • 【攻防实战】实战中的某钉RCE
  • 设计模式 (四)
  • 【力扣 中等 C】79. 单词搜索
  • Java基础(Maven配置)
  • 【Elasticsearch】most_fields、best_fields、cross_fields 的区别与用法
  • JVM调优实战 Day 10:性能指标采集与可视化
  • 单元测试和集成测试的区别
  • 鸿蒙 Scroll 组件深度解析:丝滑滚动交互全场景实现
  • spring中maven缺少包如何重新加载,报错java: 程序包org.springframework.web.reactive.function不存在
  • win10部署本地LLM和AI Agent
  • docker-compose部署nacos
  • 基于Uniapp+SpringBoot+Vue 的在线商城小程序
  • 前端面试专栏-主流框架:15.Vue模板编译与渲染流程
  • 给自己网站增加一个免费的AI助手,纯HTML