日期
check-box
check-box
回归 vs 分类
- 回归预测一个连续值
- 分类预测一个离散类别
从回归到分类
- 单连续值输出
- 自然区间
- 跟真实值的区别作为损失
- 通常多个输出
- 输出是预测为第类的置信度
从回归到多类分类——均方损失
- 对类别进行一位有效编码:
- 使用均方损失训练
- 最大值为预测:
从回归到多类分类——无校验比例
我们其实并不关心实际的值,而关心能否对正确的类置信度最大。
- 对类别进行一位有效编码
- 最大值为预测:
- 需要更置信的识别正确类(大余量)
从回归到多类分类——校验比例
- 输出匹配概率(非负,和为1)
- 概率和的区别作为损失
Softmax和交叉熵损失
- 交叉熵常用来衡量两个概率的区别
- 将它作为损失:
- 其梯度是真实概率和预测概率的区别
总结
- Softmax回归是一个多类分类模型
- 使用Softmax操作子得到每个类的预测置信度
- 使用交叉熵来衡量预测和标号的区别
损失函数
L2 Loss
L1 Loss
- pros:不管距离原点多远,梯度都相同,更新稳定;
- cons:在原点处不可导,且更新幅度较大;
Huber’s Robust Loss
图像分类数据集
- MNIST数据集是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。我们将使用类似但更复杂的Fashion-MNIST数据集
- 通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中
- 对于一个PIL图片,
ToTensor()
会将其转换为形状为[C, H, W]
的张量,其中C
是通道数(比如RGB图像有3个通道),H
是图像的高度,W
是图像的宽度。 - 像素值会从整数(0到255)被转换为浮点数(0到1)。
transforms.ToTensor()
transforms.ToTensor()
是 PyTorch 中 torchvision.transforms
模块提供的一个转换函数。它的作用是将一个PIL图片或者NumPy数组转换为一个PyTorch张量(Tensor),并且将像素值从0-255的范围转换到0-1的浮点数范围。具体来说:
这个转换通常是深度学习模型的输入格式要求,因为张量表示能够方便地进行计算,并且0-1的浮点数更适合模型的梯度计算。
transform = trans
在代码中,
transform = trans
的作用是将 transforms.ToTensor()
(这里的 trans
)作为一个参数传递给 FashionMNIST
数据集的构造函数。这意味着在加载 FashionMNIST
数据集时,每个样本图像都会首先被应用这个 ToTensor
转换,即将其转换为张量并归一化到0-1的浮点数。总结
transforms.ToTensor()
将图像转换为PyTorch张量,并将像素值归一化。transform = trans
是将这个转换应用到 FashionMNIST
数据集中,以确保数据在加载时自动进行上述转换。- 读取一小批量数据,大小为
batch_size
- 定义
load_data_fashion_mnist
函数
Softmax回归的从零开始实现
- 将展平每个图像,将它们视为长度为784的向量。因为我们的数据集有10个类别,所以网络输出维度为10
- 给定一个矩阵
X
, 我们可以对所有元素求和:
- 实现softmax:
- 实现softmax回归模型
- 实现交叉熵损失函数
- 将预测类别与真实
y
元素进行比较
- 我们可以评估任意模型
net
的准确率
Accumulator
实例中创建了2个变量,用于分别存储正确预测的数量和预测的总数量
- Softmax回归的训练(这里同时考虑了手动实现或者使用nn.Module,方便日后复用)
- 定义一个在动画中绘制数据的实用程序类
- 训练函数
- 小批量随机梯度下降来优化模型的损失函数
- 开始训练
- 对图像进行分类预测
softmax回归的简洁实现
- softmax回归的输出层是一个全连接层
- 在交叉熵损失函数中传递未归一化的预测,并同时计算softmax及其对数
- 使用学习率为0.1的小批量随机梯度下降作为优化算法
- 调用之前定义的训练函数来训练模型