学习来源:李沐老师
softmax回归
回归vs分类
- 回归估计一个连续值
- 分类预测一个离散类别
MINIST:手写数字识别
ImageNet:自然物体分类
Kaggle上的分类问题
将人类蛋白质显微镜图片分为28类
将恶意软件分成9个类别
将恶意的Wikipedia评论分成7类
从回归到多类分类
- 回归
- 单连续数值输出
- 自然区间R
- 跟真实值的区别作为损失
- 分类
- 通常多个输出
- 输出是预测为第i类的置信度
均方损失
- 对类别进行一位有效编码
- 使用均方损失训练
- 最大值最为预测
无校验比例
- 对类别进行一位有效编码
- 最大值最为预测
- 需要更置信的识别正确类(大余量)
校验比例
- 输出匹配概率(非负,和为1)
- 概率y和 y ^ \hat{y} y^的区别作为损失
softmax和交叉熵损失
总结:
- softmax回归是一个多类分类模型
- 使用softmax操作子得到每个类的预测置信度
- 使用交叉熵来衡量预测和标号的区别
损失函数
L2 Loss
l ( y , y ′ ) = 1 2 ( y − y ′ ) 2 l(y,y')=\frac{1}{2}(y-y')^2 l(y,y′)=21(y−y′)2
L1 Loss
l ( y , y ′ ) = ∣ y − y ′ ∣ l(y,y')=|y-y'| l(y,y′)=∣y−y′∣
Huber’s Robust Loss
图片数据集分类
MNIST数据集是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。我们将使用类似但更为复杂的Fashion-MNIST数据集
%matplotlib inline
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
d2l.use_svg_display()
通过框架中的内置函数将Fashion-MINIST数据集下载读取到内存中
# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式,
# 并除以255使得所有像素的数值均在0到1之间
trans = transforms.ToTensor()
mnist_train = torchvision.datasets.FashionMNIST(
root="../data", train=True, transform=trans, download=True)
mnist_test = torchvision.datasets.FashionMNIST(
root="../data", train=False, transform=trans, download=True)
len(mnist_train), len(mnist_test)
(60000, 10000)
mnist_train[0][0].shape
torch.Size([1, 28, 28])
两个可视化数据集得函数
def get_fashion_mnist_labels(labels): #@save
"""返回Fashion-MNIST数据集的文本标签"""
text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',
'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']
return [text_labels[int(i)] for i in labels]
def show_images(imgs, num_rows, num_cols, titles=None, scale