DAY48 随机函数与广播机制
@浙大疏锦行
知识点:
- 随机张量的生成:torch.randn函数
- 卷积和池化的计算公式(可以不掌握,会自动计算的)
- pytorch的广播机制:加法和乘法的广播机制
ps:numpy运算也有类似的广播机制,基本一致
作业:自己多借助ai举几个例子帮助自己理解即可
1 随即张量的生成
通过随机函数实现需要的张量格式,无需像之前那样必须加载一张真实的图片
1.1 torch.randn函数
作用:创建一个由标准正态分布随机数填充的张量
参数:torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
- size:必选参数,表示输出张量的形状(如(3, 4)表示 3 行 4 列的矩阵)。
- dtype:可选参数,指定张量的数据类型(如torch.float32、torch.int64等)。
- device:可选参数,指定张量存储的设备(如’cpu’或’cuda’)。
- requires_grad:可选参数,是否需要计算梯度(常用于训练模型时)。
1.2 其他随机函数
torch.rand()
:生成在[0,1)范围内均匀分布的随机数
torch.randint()
:生成指定范围内的随机整数
torch.normal()
:生成指定均值和标准差的正态分布随机数
查看张量大小:torch.shape
多分类问题通常使用Softmax,二分类问题用Sigmoid
2 广播机制
作用:一种强大的张量运算特性,允许在不同形状 的张量之间进行算术运算,而无需显式地扩展张量维度或复制数据
2.1 Pytorch广播机制
当对两个形状不同的张量进行运算时,PyTorch 会按以下规则自动处理维度兼容性:
- 从右向左比较维度:PyTorch 从张量的最后一个维度(最右侧)开始向前逐维比较。
- 维度扩展条件:
- 相等维度:若两个张量在某一维度上大小相同,则继续比较下一维度。
- 一维扩展:若其中一个张量在某一维度上大小为 1,则该维度会被扩展为另一个张量对应维度的大小。
- 不兼容错误:若某一维度大小既不相同也不为 1,则抛出
RuntimeError
。-----维度必须满足广播规则,否则会报错。
- 维度补全规则:若一个张量的维度少于另一个,则在其左侧补 1 直至维度数匹配。
2.2 加法广播机制
包含:二维张量与一维张量相加、三维张量与二维张量相加、二维张量与标量相加、高维张量与低维张量相加
关键总结
- 尺寸变化:广播后的形状由各维度的最大值决定(示例 2 中最终形状为 (2, 2, 2))。
- 值扩展:维度为 1 的张量通过复制扩展值(示例 1 中 b 从 [1, 2, 3] 扩展为三行相同的值)。
- 内存效率:扩展是逻辑上的,实际未复制数据,避免了内存浪费。
2.3 乘法广播机制
矩阵乘法除了遵循通用广播规则外,还需要满足矩阵乘法的维度约束
包含:批量矩阵与单个矩阵相乘、批量矩阵与批量矩阵相乘(部分广播)、三维张量与二维张量相乘(高维广播)