知识点回顾:
- 随机张量的生成:torch.randn函数
- 卷积和池化的计算公式(可以不掌握,会自动计算的)
- pytorch的广播机制:加法和乘法的广播机制
ps:numpy运算也有类似的广播机制,基本一致
**作业:**自己多借助ai举几个例子帮助自己理解即可
1. 随机张量生成:torch.randn
python
import torch
# 生成标准正态分布的随机张量
a = torch.randn(3) # 1维张量 (3个元素)
b = torch.randn(2, 3) # 2x3 矩阵
c = torch.randn(1, 2, 3) # 三维张量 (1x2x3)
print(f"a: {a}\nshape: {a.shape}")
print(f"b:\n{b}\nshape: {b.shape}")
print(f"c:\n{c}\nshape: {c.shape}")
- 卷积/池化尺寸计算(补充)
python
import torch.nn as nn
# 卷积层尺寸公式
def conv_size(H_in, W_in, kernel, stride=1, padding=0):
H_out = (H_in + 2*padding - kernel) // stride + 1
W_out = (W_in + 2*padding - kernel) // stride + 1
return H_out, W_out
# 示例:输入32x32图片,3x3卷积核
print("卷积输出尺寸:", conv_size(32, 32, kernel=3, padding=1)) # (32,32)
3. 广播机制详解(重点示例)
规则总结:
-
从最右边维度开始对齐
-
维度兼容条件:相等 / 其中一个是1 / 其中一个不存在
-
缺失维度自动补1 示例1:基础广播(向量+标量)
python
v = torch.tensor([1, 2, 3]) # (3)
s = torch.tensor(10) # () -> 广播为(3)
print(v + s) # tensor([11, 12, 13])
示例2:矩阵+向量(自动补维度)
python
M = torch.ones(2, 3) # (2,3)
v = torch.tensor([1, 2, 3]) # (3) -> 广播为(1,3) -> (2,3)
"""
计算过程:
M: [[1,1,1], v: [[1,2,3]] -> 广播后:
[1,1,1]] [[1,2,3]]
结果:[[2,3,4],
[2,3,4]]
"""
print(M + v)
示例3:三维广播(维度扩展)
python
A = torch.ones(3, 1, 2) # (3,1,2)
B = torch.tensor([[1, 2]]) # (1,2) -> 广播为(1,1,2) -> (3,1,2)
"""
广播过程:
A: [[[1,1]], B: [[[1,2]]] -> 扩展为:
[[1,1]], [[1,2]]
[[1,1]]] [[1,2]]
"""
print(A * B) # 逐元素乘法