深度学习数学基础
数据操作
Q1:什么是张量
在机器学习中,张量(Tensor) 是一种通用的数据表示方式,类似于标量(数值)、向量和矩阵,但可以扩展到任意维度。它是深度学习框架(如 PyTorch 和 TensorFlow)中的核心数据结构,用于表示输入数据、参数和计算结果。
- 标量(0维张量)
- 向量(1维张量)
- 矩阵(2维张量)
- 高维张量(3维及以上)
张量的特点
- 多维数组:张量是多维的、灵活的数组结构。
- 通用性:从标量到高维数组,张量是一种统一的数学表示。
- 维度(rank):张量的维度表示其“轴”的数量。例如,2维张量有 2 个轴。
- 形状(shape):张量每个维度的大小。例如,一个形状为
(3, 4, 5)
的张量有 3 个维度,分别包含 4 行、5 列。
张量在机器学习中的作用
- 表示数据:如输入的图片、文本、音频或视频都可以表示为张量。
- 图像:通常是 3维张量(高度×宽度×通道)。
- 批量处理:常用 4维张量(批量大小×高度×宽度×通道)。
- 表示模型参数:例如,神经网络的权重和偏置都是张量。
- 计算操作:张量是模型训练和推理的基本操作单元,支持线性代数(如矩阵乘法)、广播、卷积等操作。
Q2:什么是广播机制
错误示例
这是由于张量 x
和 y
的形状不匹配导致的问题
在 PyTorch 中,张量之间的算术运算要求它们的形状是相同的,或者可以通过广播机制使它们形状对齐
当执行 x + y
时,PyTorch 会尝试对两个张量进行广播。广播的规则是:
- 从后往前匹配每个维度
- 如果两个张量的对应维度:
- 相等,则匹配成功
- 其中一个维度为
1
,则该维度可以广播 - 其他情况,则报错
1 | x: (2, 2, 3) |
- 第三维(列):
3
和3
相等,匹配成功 - 第二维(行):
2
和4
不相等,且没有为1
的维度,无法广播,导致报错 - 第一维(块数):
2
和1
,可以广播(无问题)
因此,报错来源是 第二维(行)的大小不一致
解决方法
根据需求调整张量的形状,使它们在第二维匹配或适配广播规则
方法 1:调整 y
的形状
如果需要在第二维将 y
的行数匹配到 x
的行数,可以用 reshape
或 repeat
:1
2y_new = y.reshape(1, 2, 2, 3).sum(dim=2) # 将第二维的 4 压缩成 2
print(x + y_new)
方法 2:调整 x
的形状
如果需要在第二维将 x
的行数扩展到与 y
一样,可以使用 repeat
:1
2x_new = x.repeat(1, 2, 1) # 重复第二维
print(x_new + y)
方法 3:明确广播意图
如果是逐块运算,可以明确指定目标操作。例如:1
2
3x_expanded = x.unsqueeze(1) # 调整形状为 (2, 1, 2, 3)
y_expanded = y.unsqueeze(0) # 调整形状为 (1, 1, 4, 3)
result = x_expanded + y_expanded # 广播
Q3:tensor与numpy转换时是否共享内存
演示如下
数据预处理
python操作文件的读取和写入
1 | import os |
1 | import os |
效果如下
线性代数
如何理解线性代数中的范数
线性代数中的范数(norm)是衡量向量大小的一种方法,类似于我们平常说的“长度”或者“距离”。范数可以理解为一种度量工具,用于描述向量在某种意义上的“大小”或者“长度”。它满足一些基本的性质,包括非负性、齐次性、三角不等式等。