知识点: 随机张量的生成:torch.randn函数 卷积和池化的计算公式(可以不掌握,模型会自动计算的) pytorch的广播机制:加法和乘法的广播机制 ps:numpy运算也有类似的广播机制,基本一致 作业:借助ai举几个例子帮助自己理解
一、torch.randn 生成随机张量
作用:生成服从标准正态分布(均值 0,方差 1)的随机张量。
例子:
import torch
# 生成形状为(2, 3)的二维随机张量
tensor1 = torch.randn(2, 3)
print(tensor1)
# 输出类似:
# tensor([[-0.1234, 0.4567, -0.8901],
# [ 1.2345, -0.6789, 0.3456]])
# 生成形状为(3, 2, 4)的三维随机张量(3个2×4的矩阵)
tensor2 = torch.randn(3, 2, 4)
二、PyTorch 广播机制(加法 / 乘法)
核心规则:维度从后往前对齐,长度为 1 的维度可扩展至匹配另一张量的维度。
1. 加法广播
例子 1:二维张量 + 一维张量(行广播)
a = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 形状(2, 3)
b = torch.tensor([10, 20, 30]) # 形状(3,)
c = a + b # 等价于a的每一行都加上b
print(c)
# 输出:
# tensor([[11, 22, 33],
# [14, 25, 36]])
原理:b 的形状 (3,) → 扩展为 (1, 3),再与 a 的 (2, 3) 对齐相加。
例子 2:三维张量 + 二维张量(通道广播)
x = torch.randn(2, 3, 4) # 形状(2, 3, 4)(假设为2个样本,3通道,4×4特征图)
y = torch.randn(1, 3, 1) # 形状(1, 3, 1)(可理解为3通道的偏置,每个通道一个值)
z = x + y # y会扩展为(2, 3, 4),每个样本的每个通道的所有元素都加上对应通道的偏置
2. 乘法广播
逻辑与加法一致,仅运算改为乘法。
例子:张量 × 标量(最简化广播)
d = torch.tensor([1, 2, 3])
e = d * 2 # 每个元素×2,输出tensor([2, 4, 6])
三、Numpy 广播机制(与 PyTorch 基本一致)
import numpy as np
arr1 = np.array([[1, 2], [3, 4]]) # 形状(2, 2)
arr2 = np.array([10, 20]) # 形状(2,)
arr3 = arr1 * arr2 # 等价于arr1的每一行 × arr2
print(arr3)
# 输出:
# array([[10, 40],
# [30, 80]])
@浙大疏锦行