动学学深度学习pytorch

参考地址:https://zh.d2l.ai/

文章目录

  • 动学学深度学习pytorch
    • 1-第05章-深度学习计算
      • 1. 层(Layer)与块(Block)
        • 1.1 什么是深度学习中的“层”?
        • 1.2 什么是“块”(Block)?
        • 1.3 PyTorch 中如何定义自定义块?
      • 2. Sequential 与自定义顺序块
        • 2.1 `nn.Sequential` 的作用
        • 2.2 如何手写简化版 `MySequential`?
      • 3. 参数管理
        • 3.1 如何访问模型任意层的参数?
        • 3.2 如何初始化参数?
        • 3.3 什么是参数绑定(共享)?
      • 4. 延后初始化(Deferred Initialization)
        • 4.1 什么是延后初始化?
      • 5. 自定义层
        • 5.1 如何创建不带参数的层?
        • 5.2 如何创建带参数的层?
      • 6. 模型读写
        • 6.1 如何保存与加载模型参数?
        • 6.2 如何保存/加载完整张量或张量字典?
      • 7. GPU 计算
        • 7.1 如何查看可用 GPU?
        • 7.2 如何将张量与模型移至 GPU?
        • 7.3 跨 GPU 注意事项


1-第05章-深度学习计算

1. 层(Layer)与块(Block)

1.1 什么是深度学习中的“层”?

层是神经网络的基本计算单元,接收输入、生成输出,并由一组可学习参数(权重、偏置)描述。

1.2 什么是“块”(Block)?

块是比层更大、可递归组合的抽象单元,可以表示:

  • 单个层
  • 多个层组成的组件
  • 整个模型本身
    块通过类(class)实现,必须实现:
  • forward():前向传播
  • 参数存储与初始化
  • 反向传播由框架自动完成。
1.3 PyTorch 中如何定义自定义块?

示例:实现一个 20→256→10 的 MLP 块

class MLP(nn.Module):def __init__(self):super().__init__()self.hidden = nn.Linear(20, 256)self.out = nn.Linear(256, 10)def forward(self, X):return self.out(F.relu(self.hidden(X)))

2. Sequential 与自定义顺序块

2.1 nn.Sequential 的作用

按顺序串联子模块,自动将上一层的输出作为下一层输入。

net = nn.Sequential(nn.Linear(20, 256),nn.ReLU(),nn.Linear(256, 10)
)
2.2 如何手写简化版 MySequential
class MySequential(nn.Module):def __init__(self, *args):super().__init__()for idx, module in enumerate(args):self._modules[str(idx)] = moduledef forward(self, X):for block in self._modules.values():X = block(X)return X

3. 参数管理

3.1 如何访问模型任意层的参数?
  • 索引方式
net[2].weight      # 第3层权重
net[2].bias.data   # 第3层偏置值
  • 一次性遍历
for name, param in net.named_parameters():print(name, param.shape)
3.2 如何初始化参数?
  • 内置初始化器
nn.init.normal_(net[0].weight, mean=0, std=0.01)
nn.init.constant_(net[0].bias, 0)
  • 自定义初始化
def my_init(m):if type(m) == nn.Linear:with torch.no_grad():m.weight.uniform_(-10, 10)m.weight *= m.weight.abs() >= 5
net.apply(my_init)
3.3 什么是参数绑定(共享)?

多个层使用同一 Parameter 对象,修改一处即全部同步。

shared = nn.Linear(8, 8)
net = nn.Sequential(nn.Linear(4, 8), nn.ReLU(),shared, nn.ReLU(),shared, nn.ReLU(),nn.Linear(8, 1)
)

4. 延后初始化(Deferred Initialization)

4.1 什么是延后初始化?

框架直到第一次前向传播时才根据输入张量推断各层权重形状,无需手动指定输入维度。

net = nn.Sequential(nn.LazyLinear(256), nn.ReLU(), nn.LazyLinear(10))
net(torch.randn(2, 20))  # 触发初始化

5. 自定义层

5.1 如何创建不带参数的层?

示例:将输入减去均值

class CenteredLayer(nn.Module):def forward(self, X):return X - X.mean()
5.2 如何创建带参数的层?

示例:自定义全连接层

class MyLinear(nn.Module):def __init__(self, in_units, units):super().__init__()self.weight = nn.Parameter(torch.randn(in_units, units))self.bias   = nn.Parameter(torch.randn(units))def forward(self, X):return torch.matmul(X, self.weight) + self.bias

6. 模型读写

6.1 如何保存与加载模型参数?
  • 保存
torch.save(net.state_dict(), 'mlp.params')
  • 加载
clone = MLP()
clone.load_state_dict(torch.load('mlp.params'))
6.2 如何保存/加载完整张量或张量字典?
torch.save({'x': x, 'y': y}, 'tensor_dict.pt')
data = torch.load('tensor_dict.pt')

7. GPU 计算

7.1 如何查看可用 GPU?
torch.cuda.device_count()          # GPU 数量
torch.device('cuda:0')             # 第0块 GPU
7.2 如何将张量与模型移至 GPU?
  • 张量
X = torch.ones(2, 3, device='cuda:0')
  • 模型
net = nn.Sequential(nn.Linear(3, 1))
net.to('cuda:0')
7.3 跨 GPU 注意事项
  • 必须保证参与运算的数据在同一设备上
X_on1 = X.cuda(1)   # 复制到 GPU1
Y_on1 = Y.cuda(1)
Z = X_on1 + Y_on1
  • 减少 CPU↔GPU 拷贝次数以避免性能瓶颈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94242.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94242.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94242.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧工厂烟雾检测:全场景覆盖与精准防控

智慧工厂烟雾检测:构建工业安全的智能防线(所有图片均为真实项目案例)在工业4.0时代,智慧工厂通过物联网、人工智能与大数据技术的深度融合,实现了生产流程的数字化与智能化。然而,工厂环境中的火灾隐患始终…

@JsonIgnoreProperties注解详解

JsonIgnoreProperties是 Jackson 库中的一个重要注解,用于在 JSON 序列化(对象转 JSON)和反序列化(JSON 转对象)过程中​​控制属性的可见性​​。它提供了更高级别的属性忽略能力,特别适合处理复杂场景。一…

红酒数据集预处理实战:缺失值处理的 5 种打开方式,从入门到进阶一步到位

在数据分析与建模流程中,缺失值处理是数据预处理阶段的关键步骤,直接影响后续模型的准确性与稳定性。本文以红酒数据集为研究对象,详细介绍如何通过基础统计方法(均值、中位数、众数)、完整案例分析(CCA&am…

Node.js 开发 JavaScript SDK 包的完整指南(AI)

一、核心概念SDK 包定义 专为特定服务/平台封装的工具库,提供标准化 API 调用、错误处理、类型声明等功能。示例:支付宝 SDK、AWS SDK、微信小程序 SDK。技术栈选择 语言:JavaScript/TypeScript(推荐 TS,便于类型提示&…

Redis实战-基于Session实现分布式登录

1.流程分析1.1发送短信验证码提交手机号的时候要进行校验手机号,校验成功才会去生成验证码,将验证码保存到session,发生他把这部分那。1.2短信验证码登录/注册如果提交手机号和验证码之后,校验一致才进行根据手机号查询用户&#…

疯狂星期四文案网第47天运营日记

网站运营第47天,点击观站: 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 今日访问量 今日搜索引擎收录情况 必应现在是边收录边k页面 百度快倒闭 网站优化点 完善工作流,全面实现文案自动化采集,se…

Vue生命周期以及自定义钩子和路由

Vue生命周期常用的onMounted挂载后执行和onUnmounted卸载前以及onupdated更新后实际上用react对比就是useEffect&#xff0c;而且挂载顺序也是子组件先于父组件然后往外的栈结构&#xff0c;先进后出。1.Vue的生命周期<template><h2>当前求和为{{ sum }}</h2>…

探索Thompson Shell:Unix初代Shell的智慧

引言 在计算机科学的漫漫长河中&#xff0c;Thompson Shell 无疑占据着举足轻重的开创性地位&#xff0c;它是 Unix 系统的第一个 shell&#xff0c;诞生于 1971 年&#xff0c;由计算机领域的传奇人物 Ken Thompson 开发。在那个计算机技术刚刚起步、硬件资源极度匮乏的年代&a…

MySQL B+ 树索引详解:从原理到实战优化

引言在现代数据库应用中&#xff0c;查询效率是影响系统性能的关键因素之一。而索引&#xff0c;尤其是 B 树索引&#xff0c;是 MySQL 中最常用、最重要的性能优化手段。正确使用索引可以将查询时间从毫秒级降低到微秒级&#xff0c;极大地提升应用响应速度。1. B 树索引的重要…

计算机内存中的整型存储奥秘、大小端字节序及其判断方法

目录 一、回顾与引入&#xff1a;整数在内存中的存储方式 为什么要采用补码存储&#xff1f; 二、大小端字节序及其判断方法 1、什么是大小端&#xff1f; 2、为什么存在大小端&#xff1f; 3、练习 练习1&#xff1a;简述大小端概念并设计判断程序&#xff08;百度面试…

Redis 最常用的 5 种数据类型

Redis 支持多种灵活的数据类型&#xff0c;每种类型针对特定场景优化。以下是 **Redis 最常用的 5 种数据类型**及其核心特点和应用场景&#xff1a;1. 字符串&#xff08;String&#xff09;描述&#xff1a;最基本的数据类型&#xff0c;可存储文本、数字&#xff08;整数/浮…

【嵌入式】RK3588 对比 NVIDIA Jetson,Radxa Rock 5B vs Orange Pi 5 Max

RK3588这个芯片,适合AI应用么,为什么这么贵呢 AI 边缘盒子里的旗舰芯 深度分析一下 RK3588(瑞芯微 Rockchip RK3588) 为什么被很多人关注在 AI 应用,以及它价格偏高的原因。 🧩 1. RK3588 的基本情况 制程:8nm(Samsung 8nm LP) CPU:8 核 big.LITTLE 架构(4 Cortex-…

暴雨让高性能计算更“冷静”

当AI大模型的参数突破万亿&#xff0c;当深地探测的精度迈向微米&#xff0c;当数字经济的脉搏与千行百业深度共振&#xff0c;算力已成为驱动时代向前的核心引擎。然而&#xff0c;传统风冷技术在高密度算力需求面前渐显乏力——机柜内的热浪如同无形的枷锁&#xff0c;既制约…

SpringAI集成MCP

文章目录1_调用公用MCP2_Stdio方式3_Stdio实现原理4_SSE方式5_自定义MCP客户端6_MCP Server权限控制SpringAI 通过 SpringBoot 集成扩展了 MCP Java SDK &#xff0c;提供了客户端和服务端 starter&#xff0c;让 AI 应用程序快速支持 MCP。接下来直接演示。 1_调用公用MCP 在…

Spring Start Here 读书笔记:第10章 Implementing REST services

REST 服务可用于实现两个应用之间的通讯&#xff0c;包括 Web 应用中的客户端和服务器之间&#xff0c;移动应用与后端服务之间&#xff0c;或两个后端服务之间。 10.1 使用 REST 服务在应用之间交换数据 REST端点是应用程序通过 Web 协议公开服务的方式&#xff0c;因此也称…

SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在邮件/短信发送功能上的全面横向对比报告

以下是对SYBASE ASE、Oracle、MySQL/MariaDB、SQL Server及PostgreSQL在邮件/短信发送功能上的全面横向对比报告&#xff08;截至2025年8月最新版本&#xff09;&#xff0c;涵盖技术实现、配置复杂度、适用场景及权威评测&#xff1a;​​一、邮件发送能力对比​​​​1. Orac…

服务器与客户端

目录 一、服务器&#xff08;Server&#xff09; 核心特点 常见类型 二、客户端&#xff08;Client&#xff09; 核心特点 常见类型 客户端与服务器的交互流程 补充&#xff1a;与 “对等网络&#xff08;P2P&#xff09;” 的区别 C/S模式 一、C/S 模式的核心原理 …

GaussDB 并发自治事务数达到最大值处理案例

1 业务背景自治事务&#xff08;Autonomous Transactions&#xff09;是一种高级特性&#xff0c;允许你在一个事务中执行另一个独立的事务。这种机制特别有用&#xff0c;尤其是在需要在一个事务中执行多个操作但又不想因为其中一个操作失败而影响整个事务的场景。2 业务影响在…

【传奇开心果系列】Flet分页自定义组件CustomPaginationComponent封装版自定义模板

Flet分页自定义组件CustomPaginationComponent封装版自定义模板一、效果展示GIF动图二、应用场景三、特色说明四、源码下载地址一、效果展示GIF动图 二、应用场景 图片浏览应用&#xff1a; 用户可以通过分页组件浏览多张图片&#xff0c;每点击一次“上一页”或“下一页”按钮…

数据安全——39页解读数字化转型大数据安全基础培训方案【附全文阅读】

适应人群为企业数据安全管理人员、IT 运维人员、数字化转型决策者、网络安全工程师及关注大数据安全的从业人员。主要内容围绕数字化转型中大数据安全展开,核心包括基础概念(信息、数据与大数据的定义及区别,大数据 4V 特点与来源);安全风险(企业面临的数据资产管理缺失、…