【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

简介: 【Pytorch神经网络基础理论篇】 08 Softmax 回归 + 损失函数 + 图片分类数据集

同学你好!本文章于2021年末编写,已与实际存在较大的偏差!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,


Pytorch深度学习·理论篇(2023版)目录地址为:


CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录


本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!

https://v9999.blog.csdn.net/article/details/127587345

欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~


103b746101d146cd93357daedb91d512.png


3.4. softmax回归


回归可以用于预测多少的问题。 比如预测房屋被售出价格,或者棒球队可能获得的胜场数,又或者患者住院的天数。


事实上,我们也对分类问题感兴趣:不是问“多少”,而是问“哪一个”:


  • 某个电子邮件是否属于垃圾邮件文件夹?


  • 某个用户可能注册或不注册订阅服务?


  • 某个图像描绘的是驴、狗、猫、还是鸡?


  • 某人接下来最有可能看哪部电影?


通常,机器学习实践者用分类这个词来描述两个有微妙差别的问题:


1. 我们只对样本的“硬性”类别感兴趣,即属于哪个类别;

2. 我们希望得到“软性”类别,即得到属于每个类别的概率。 这两者的界限往往很模糊。其中的一个原因是:即使我们只关心硬类别,我们仍然使用软类别的模型。


3.4.1. 分类问题


我们从一个图像分类问题开始。 假设每次输入是一个2×2的灰度图像。 我们可以用一个标量表示每个像素值,每个图像对应四个特征x1,x2,x3,x4。 此外,假设每个图像属于类别“猫”,“鸡”和“狗”中的一个。


359018149ac042ac9e2ad1accda6fdea.png


接下来,我们要选择如何表示标签。 我们有两个明显的选择:最直接的想法是选择y∈{1,2,3}, 其中整数分别代表{狗,猫,鸡}。 这是在计算机上存储此类信息的有效方法。 如果类别间有一些自然顺序, 比如说我们试图预测{婴儿,儿童,青少年,青年人,中年人,老年人}, 那么将这个问题转变为回归问题,并且保留这种格式是有意义的。


67db12588d3447548e1807fed1dfc7f9.png


幸运的是,一般的分类问题并不与类别之间的自然顺序有关。 统计学家很早以前就发明了一种表示分类数据的简单方法:独热编码(one-hot encoding)。 独热编码是一个向量,它的分量和类别一样多。类别对应的分量设置为1,其他所有分量设置为0。


在我们的例子中,标签y将是一个三维向量, 其中(1,0,0)对应于“猫”、(0,1,0)对应于“鸡”、(0,0,1)对应于“狗”:


3.4.2. 网络架构


为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。 每个输出对应于它自己的仿射函数。 在我们的例子中,由于我们有4个特征和3个可能的输出类别, 我们将需要12个标量来表示权重(带下标的w), 3个标量来表示偏置(带下标的b)。 下面我们为每个输入计算三个未规范化的预测(logit):o1、o2和o3。


88ac2c5755bf4424ae36df242615f0e8.png


我们可以用神经网络图下来描述这个计算过程。 与线性回归一样,softmax回归也是一个单层神经网络。 由于计算每个输出o1、o2和o3取决于 所有输入x1、x2、x3和x4, 所以softmax回归的输出层也是全连接层。


721f8433a11e475cbb9e039d18c60fa8.png


为了更简洁地表达模型,我们仍然使用线性代数符号。 通过向量形式表达为o=Wx+b, 这是一种更适合数学和编写代码的形式。 由此,我们已经将所有权重放到一个3×4矩阵中。 对于给定数据样本的特征x, 我们的输出是由权重与输入特征进行矩阵-向量乘法再加上偏置b得到的。


3.4.3. 全连接层的参数开销


正如我们将在后续章节中看到的,在深度学习中,全连接层无处不在。全连接层是“完全”连接的,可能有很多可学习的参数。 具体来说,对于任何具有d个输入和q个输出的全连接层, 参数开销为O(dq),这个数字在实践中可能高得令人望而却步。 幸运的是,将d个输入转换为q个输出的成本可以减少到O(dqn), 其中超参数n可以由我们灵活指定,以在实际应用中平衡参数节约和模型有效性。


3.4.4. softmax运算


现在我们将优化参数以最大化观测数据的概率。 为了得到预测结果,我们将设置一个阈值,如选择具有最大概率的标签。


要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1。 此外,我们需要一个训练目标,来鼓励模型精准地估计概率。 在分类器输出0.5的所有样本中,我们希望这些样本有一半实际上属于预测的类。 这个属性叫做校准(calibration)。


社会科学家邓肯·卢斯于1959年在选择模型(choice model)的理论基础上发明的softmax函数正是这样做的: softmax函数将未规范化的预测变换为非负并且总和为1,同时要求模型保持可导。 我们首先对每个未规范化的预测求幂,这样可以确保输出非负。 为了确保最终输出的总和为1,我们再对每个求幂后的结果除以它们的总和。如下式:


16b795b4e5294da38bd5e68781a53691.png


这里,对于所有的jj总有0≤y^j≤1。 因此,y^可以视为一个正确的概率分布。 softmax运算不会改变未规范化的预测o之间的顺序,只会确定分配给每个类别的概率。 因此,在预测过程中,我们仍然可以用下式来选择最有可能的类别。


4196669b1d584ae0ad23a8e7c904cdf6.png


尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。 因此,softmax回归是一个线性模型(linear model)。


3.4.5. 小批量样本的矢量化


424eba98a0734cf0b9fc97b27a28d7e0.png


3.4.6. 损失函数


我们将使用最大似然估计来度量预测的效果。


860ea248c0f84ed3ae465ee6ff720c1e.png


3.4.6.1. 对数似然


084ec00f9cb747bab3423ca091cd90ab.png


由于y是一个长度为q的独热编码向量, 所以除了一个项以外的所有项j都消失了。 由于所有y^j都是预测的概率,所以它们的对数永远不会大于0。 因此,如果正确地预测实际标签,即如果实际标签P(y∣x)=1, 则损失函数不能进一步最小化。 注意,这往往是不可能的。 例如,数据集中可能存在标签噪声(比如某些样本可能被误标), 或输入特征没有足够的信息来完美地对每一个样本分类。


3.4.6.2. softmax及其导数


d07564e536df465d9abd0c5ca643622b.png


3.4.6.3. 交叉熵损失


我们观察到的不仅仅是一个结果,而是整个结果分布。 对于标签y,我们可以使用与以前相同的表示形式。 唯一的区别是,我们现在用一个概率向量表示,如(0.1,0.2,0.7), 而不是仅包含二元项的向量(0,0,1)。 我们使用 (3.4.8)来定义损失l, 它是所有标签分布的预期损失值。 此损失称为交叉熵损失(cross-entropy loss),它是分类问题最常用的损失之一。 本节我们将通过介绍信息论基础来理解交叉熵损失。


da4eca9bc25b476b9a66d8444a369f65.png

a1c96a69513541caa8d396cafc105b92.png

59e91a4e21064d96b32ede1bd197e8a8.png


3.4.7. 信息论基础


信息论(information theory)涉及编码、解码、发送以及尽可能简洁地处理信息或数据。


3.4.7.1. 熵


信息论的核心思想是量化数据中的信息内容,该数值被称为分布P的熵(entropy)。可以通过以下方程得到:


ad9e5f7030474a8d99559754eabf12cf.png


3.4.7.2. 惊异


压缩与预测有什么关系呢?举一个极端的例子,假如数据流中的每个数据完全相同,这会是一个非常无聊的数据流。 由于它们总是相同的,所以很容易被预测。 所以,为了传递数据流的内容,我们不必传输任何信息。 因此,当数据易于预测,也就易于压缩。


但是,如果我们不能完全预测每一个事件,那么我们有时可能会感到“惊异”。 在观察一个事件j,并赋予它(主观)概率P(j)。 当我们赋予一个事件较低的概率时,我们的惊异会更大。 在 (3.4.11)中定义的熵, 是当分配的概率真正匹配数据生成过程时的预期惊异。


3.4.7.3. 重新审视交叉熵


交叉熵想象为“主观概率为Q的观察者在看到根据概率P生成的数据时的预期惊异”。 当P=Q时,交叉熵达到最低。 在这种情况下,从P到Q的交叉熵是H(P,P)=H(P)。


简而言之,我们可以从两方面来考虑交叉熵分类目标:

(i)最大化观测数据的似然;

(ii)最小化传达标签所需的惊异。


3.4.8. 模型预测和评估


在训练softmax回归模型后,给出任何样本特征,我们可以预测每个输出类别的概率。 通常我们使用预测概率最高的类别作为输出类别。 如果预测与实际类别(标签)一致,则预测是正确的。 在接下来的实验中,我们将使用精度(accuracy)来评估模型的性能。 精度等于正确预测数与预测总数之间的比率。


3.5. 图像分类数据集


import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'  # 可能是由于是MacOS系统的原因
def get_dataloader_workers():
    """使用4个进程来读取数据"""
    return 4
def load_data_fashion_mnist(batch_size, resize=None):
    """下载Fashion-MNIST数据集,然后将其加载到内存中"""
    # 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式
    # 并除以255使得所有像素的数值均在0到1之间
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
    trans = transforms.Compose(trans)
    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)
    return (data.DataLoader(mnist_train, batch_size, shuffle=True,num_workers=get_dataloader_workers()),
            data.DataLoader(mnist_test, batch_size, shuffle=False,num_workers=get_dataloader_workers()))
def get_fashion_mnist_labels(labels):
    """返回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=1.5):  #@save
    """绘制图像列表"""
    figsize = (num_cols * scale, num_rows * scale)
    _, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize)
    axes = axes.flatten()
    for i, (ax, img) in enumerate(zip(axes, imgs)):
        if torch.is_tensor(img):
            # 图片张量
            ax.imshow(img.numpy())
        else:
            # PIL图片
            ax.imshow(img)
        ax.axes.get_xaxis().set_visible(False)
        ax.axes.get_yaxis().set_visible(False)
        if titles:
            ax.set_title(titles[i])
    return axes


3.6. softmax回归的从零开始实现


3.4.9. 小结¶


  • softmax运算获取一个向量并将其映射为概率。


  • softmax回归适用于分类问题,它使用了softmax运算中输出类别的概率分布。


  • 交叉熵是一个衡量两个概率分布之间差异的很好的度量,它测量给定模型编码数据所需的比特数。


一、Softmax 回归


1.1视频截图


9bb8e4f125624432b00819987cf0be38.png


82a1a71d738c4309999de3b958a99baa.png


837d4852926f49b09ba65fdbcaa57891.png

b0e1d2203eb4461b9a0e28f523ec9b95.png

359018149ac042ac9e2ad1accda6fdea.png

5fe8f732141d44df956e54254dea72b9.png

8e5874eebc024122bd198c004433ca74.png

acb75d9adceb4e899289b12fe0bdaaa8.png

3b79ecd5c15549299bd4300abc139f03.png

d004b3fd3bb84146afcf50f5a1df731b.png


二、损失函数


860ea248c0f84ed3ae465ee6ff720c1e.png


64ec7a7ab8e547d0878caf0af47b12a7.png

add03802bec94f7aaf81dbc9f7137909.png


1aa8a665d9f847049c2da1a730739169.png


三、图像分类数据集


87627ae89c23467688bece27ba98b2ec.png


3cfea5b622ff43d59118ba15dfad02a1.png

d2e2c425a0f849c4bff5ac15c014e3d4.png

d9ab52b7e59e454d90e1e412e52b0ae2.png

089e185371304f60968b72888b23708a.png


105847af32494e678b90a889c47ce0fe.png


四、从0开始实现sofymax回归


0930cbe0771349079281e4d2d4e5d87f.png


d4b387b0b5ea4ce7a7757b9898f08412.png

6d9b8a209e4240b08c4a0870966ae890.png


2c7713d4fa7446eb8d9935b51dbb67d2.png

16e1eb34d96f4afa9d31afc1c0eee363.png

4c60e806d46c4136b012f56d93544ef8.png


aa961772b6304edcafbc8711ec933c79.png


ee4868b81342454fb0b4e1203641c7c4.png


e397e5e768254693b504bd871a47464a.png


dd6ab711c3f1464c93266d73cd3a67f7.png


61384756a422423cac1c0db03990b548.png


43b53ba9ec184488b291f9c8afc6da7a.png


b06aa792201f40deb6a3186e8543d956.png


fd67931a9cc64882869b445144967a09.png

3d15fe9190d34222a4071391b9dccacc.png


953272c5d4b24b3081f579b8e3988a2d.png



22a353c99658491b921bf9f7ad1661cd.png


五、softmax回归的简洁实现


f957176019a4426aa3a61120c56fbe5c.png



bb3702518d124909a6eb575468973f51.png

4c341cf211c54fd7b3972f7e98af344e.png


bcbced420fc84fbda5e0a9d1999c6220.png


QA:


1.softmax 和 logistic类似


2.相对熵:是一个对称的关系


3.损失图中:橙色线 表示梯度的绝对值


4.最小化损失就等于最大化似然函数

目录
相关文章
|
3月前
|
机器学习/深度学习 数据可视化 测试技术
YOLO11实战:新颖的多尺度卷积注意力(MSCA)加在网络不同位置的涨点情况 | 创新点如何在自己数据集上高效涨点,解决不涨点掉点等问题
本文探讨了创新点在自定义数据集上表现不稳定的问题,分析了不同数据集和网络位置对创新效果的影响。通过在YOLO11的不同位置引入MSCAAttention模块,展示了三种不同的改进方案及其效果。实验结果显示,改进方案在mAP50指标上分别提升了至0.788、0.792和0.775。建议多尝试不同配置,找到最适合特定数据集的解决方案。
877 0
|
3月前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
409 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
4月前
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
|
4月前
|
机器学习/深度学习 自动驾驶 搜索推荐
深度学习之探索神经网络、感知器与损失函数
在当今的数字化时代,深度学习作为一种强大的机器学习技术,正在迅速改变着我们的生活方式。无论是智能推荐系统、自动驾驶车辆还是语音识别应用,深度学习都在背后默默地发挥作用。
68 1
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
深度学习实践:构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行分类
本文详细介绍如何使用PyTorch构建并训练卷积神经网络(CNN)对CIFAR-10数据集进行图像分类。从数据预处理、模型定义到训练过程及结果可视化,文章全面展示了深度学习项目的全流程。通过实际操作,读者可以深入了解CNN在图像分类任务中的应用,并掌握PyTorch的基本使用方法。希望本文为您的深度学习项目提供有价值的参考与启示。
|
5月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
【Tensorflow+Keras】keras实现条件生成对抗网络DCGAN--以Minis和fashion_mnist数据集为例
如何使用TensorFlow和Keras实现条件生成对抗网络(CGAN)并以MNIST和Fashion MNIST数据集为例进行演示。
64 3
|
5月前
|
机器学习/深度学习 安全 网络协议
网络安全公开数据集Maple-IDS,恶意流量检测数据集开放使用!
【8月更文挑战第29天】Maple-IDS 是东北林业大学网络安全实验室发布的网络入侵检测评估数据集,旨在提升异常基础入侵检测和预防系统的性能与可靠性。该数据集包含多种最新攻击类型,如 DDoS 和 N-day 漏洞,覆盖多种服务和网络行为,兼容 CIC-IDS 格式,便于直接使用或生成 csv 文件,适用于多种现代协议。
249 0
|
7月前
|
机器学习/深度学习 Java Serverless
Java开发者的神经网络进阶指南:深入探讨交叉熵损失函数
今天来讲一下损失函数——交叉熵函数,什么是损失函数呢?大体就是真实与预测之间的差异,这个交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息。在信息论中,交叉熵是表示两个概率分布 p,q 的差异,其中 p 表示真实分布,q 表示预测分布,那么 H(p,q)就称为交叉熵:
|
7月前
|
机器学习/深度学习 自然语言处理 前端开发
深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战
深度学习-[源码+数据集]基于LSTM神经网络黄金价格预测实战
175 0
|
7月前
|
机器学习/深度学习 自然语言处理 前端开发
深度学习-[数据集+完整代码]基于卷积神经网络的缺陷检测
深度学习-[数据集+完整代码]基于卷积神经网络的缺陷检测
119 0

热门文章

最新文章