@浙大疏锦行
DAY 48 随机函数与广播机制
知识点回顾:
- 随机张量的生成:torch.randn函数
- 卷积和池化的计算公式(可以不掌握,会自动计算的)
- pytorch的广播机制:加法和乘法的广播机制
ps:numpy运算也有类似的广播机制,基本一致
作业:自己多借助ai举几个例子帮助自己理解即可
我会结合生活中的 **“抽奖发礼物”“超市货架补货”** 等场景,将这些知识点转化为直观有趣的内容,并整理成清晰的学习笔记,方便你理解记忆。
一、知识点通俗解释 + 趣味比喻
1. 随机张量的生成:torch.randn 函数
含义:torch.randn是 PyTorch 中用于生成符合标准正态分布(均值为 0,标准差为 1)的随机张量的函数。生成的张量中每个元素的值随机且符合特定的概率分布规律,常用于初始化模型参数、生成随机噪声数据等。
比喻:把torch.randn想象成 “抽奖箱” 。抽奖箱里装满了写着不同数字的小球,这些数字的分布是有规律的 —— 大部分小球上的数字集中在 0 附近,离 0 越远的数字,抽到的概率越低。每次调用torch.randn(size),就像从抽奖箱里按size规定的数量(比如[3, 4]表示抽 3 行 4 列个小球)随机抽取小球,组成一个数字表格(张量) 。例如,用torch.randn(2, 2)得到的张量,就像从抽奖箱里随机抽出 4 个小球,把数字依次填入 2 行 2 列的表格中。
2. 卷积和池化的计算公式(可以不掌握,会自动计算的)
含义:
- 卷积:通过卷积核(小的权重矩阵)在输入张量上滑动,进行加权求和,提取局部特征;
- 池化:对输入张量的局部区域(如一个小方格)进行聚合操作(如取最大值、平均值),降低数据维度,减少计算量并保留主要特征。
虽然计算公式复杂(如卷积的滑动步长、填充计算),但在 PyTorch 中,只需定义好卷积层和池化层的参数,框架会自动完成计算。
比喻: - 卷积:像是 “盖章寻宝” 。输入张量是一张大地图,卷积核是一个刻着特殊图案的印章。盖章的人拿着印章在地图上一格一格地移动(滑动),每次盖章时,根据印章图案(卷积核权重)给地图上对应区域打分,找出可能藏有宝藏(特征)的地方。
- 池化:好比 “挑选代表” 。把地图划分成一个个小方格(局部区域),每个方格里选一个最厉害的代表(如最大值池化就是选方格中数值最大的元素),其他元素都舍弃。这样地图上的信息变少了,但留下的都是 “精英”,既能保留关键特征,又能缩小地图(张量)的大小。
因为 PyTorch 会自动完成盖章和选代表的过程,所以我们不用手动计算每一步,就像有机器人帮忙干活,我们只需要告诉它怎么干(设置参数)就行。
3. PyTorch 的广播机制:加法和乘法的广播机制
含义:当对形状不同的张量进行加法、乘法等运算时,PyTorch 会自动调整张量的形状,使运算能够进行,这个过程称为广播机制。它遵循一定的规则,比如从张量的右往左对齐维度,较小维度会被扩展(复制)到与较大维度相同大小。
比喻:把广播机制想象成 “超市货架补货” 。假设我们有两种商品数据:
- 张量 A 是一排货架上每种商品的库存数量(形状为
[5],5 种商品); - 张量 B 是所有货架都要增加的补货数量(形状为
[1],只有 1 个数字,表示每种商品都补相同数量)。
当我们要计算补货后的总库存(张量 A + 张量 B)时,广播机制就像超市员工自动把张量 B 的补货数量复制 5 份,分别对应到 5 种商品上,然后再进行相加。这就像员工不用手动一个一个计算每种商品补多少,系统自动帮他们完成复制和计算,高效又便捷。乘法也是类似的逻辑,比如张量 B 是每种商品的涨价倍数,广播机制会自动复制倍数,计算出每种商品涨价后的价格。
二、学习笔记
1. 核心概念速记表
| 知识点 | 核心定义 | 生活比喻 | 关键函数 / 操作 | 用途举例 |
|---|---|---|---|---|
| 随机张量的生成 | 生成符合标准正态分布的随机张量 | 抽奖箱随机抽数字填表 | torch.randn(size) | 初始化模型参数、生成噪声数据 |
| 卷积和池化 | 提取特征、降维,框架自动计算 | 盖章寻宝、挑选代表 | nn.Conv2d、nn.MaxPool2d | 图像识别、数据预处理 |
| PyTorch 广播机制 | 自动调整张量形状以进行运算 | 超市货架自动补货计算 | 张量加、乘等运算 | 高效处理不同形状张量计算 |
2. 重点代码示例
python
# 1. 随机张量生成
import torch
random_tensor = torch.randn(3, 4) # 生成3行4列的随机张量# 2. 卷积和池化(定义层,自动计算)
import torch.nn as nn
conv_layer = nn.Conv2d(3, 16, kernel_size=3) # 输入3通道,输出16通道,3x3卷积核
pool_layer = nn.MaxPool2d(kernel_size=2) # 2x2最大值池化
input_data = torch.randn(1, 3, 32, 32) # 模拟输入数据
output_conv = conv_layer(input_data)
output_pool = pool_layer(output_conv)# 3. 广播机制示例
a = torch.randn(5) # 形状[5]
b = torch.tensor([2]) # 形状[1]
c = a + b # 自动广播,相当于a + [2, 2, 2, 2, 2]
3. 复习口诀
.randn 像抽奖,正态分布数字挑;
卷积池化自动算,盖章选代特征显;
广播机制似补货,形状不同自动扩;
加乘运算高效做,PyTorch 里真灵活。
通过这些比喻和笔记,希望能让你轻松掌握这些知识点。如果还有疑问,随时可以问我!



