day48/60

@浙大疏锦行

DAY 48 随机函数与广播机制

知识点回顾:

  1. 随机张量的生成:torch.randn函数
  2. 卷积和池化的计算公式(可以不掌握,会自动计算的)
  3. 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.Conv2dnn.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 里真灵活。

 

通过这些比喻和笔记,希望能让你轻松掌握这些知识点。如果还有疑问,随时可以问我!