d2l-softmax实现流程

d2l.train_ch3函数,将输入数据转化为该函数所接受的格式 python中的列表是我们非常熟悉一种数据格式,但在深度学习中很少用到,神经网络需要的数据格式为张量,那我们可以通过nd.array的方式将熟悉的列表数据转为张量 from mxnet import autograd, nd data = nd.array(data) 然后通过data_iter函数,生成随机的小批量样本,经过这两步转化可以将列表数据转为神经网络所需的张量数据,接下来我们可以将数据带入常用的函数进行计算,例如d2l中的包d2l.train_ch3(net, train_iter.. 阅读详情

  在softmax中从新讲解一下传入传出各个输出量是什么

目录

数据读取

定义累加工具

定义预测训练精确度工具:

 定义任意数据集的精度检测工具

定义单个epoch训练流程

总训练函数(改正纯数字版本)

最终的整体运行命令行:

数据读取

  读取函数没什么好说的,就加了一个选择resize类,这个地方dataloader后是输出两个返回值,第一个为四维张量,表示为([bs,c,w,h]);第二个为一维张量标签,表示为([bs]),里面的数为对应各个图片的类别标签。这也是后续迭代中,X,y分别是什么。
for X, y in train_loader:
def load_data_fashion_mnist(batch_size, resize=None):  # @save
    """下载Fashion-MNIST数据集,然后将其加载到内存中"""
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
        # transforms.Resize:调整PILImage对象的尺寸。transforms.Resize([h, w])或transforms.Resize(x)等比例缩放
    trans = transforms.Compose(trans)  # 串联多个图片变换的操作
    mnist_train = torchvision.datasets.FashionMNIST(
        root="../data", train=True, transform=trans, download=False)
    mnist_test = torchvision.datasets.FashionMNIST(
        root="../data", train=False, transform=trans, download=False)
    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()))

定义累加工具

前面讲过了:

class Accumulator:
    """For accumulating sums over `n` variables."""

    def __init__(self, n):
        """Defined in :numref:`sec_softmax_scratch`"""
        self.data = [0.0] * n

    def add(self, *args):
        self.data = [a + float(b) for a, b in zip(self.data, args)]

    def reset(self):
        self.data = [0.0] * len(self.data)

    def __getitem__(self, idx):
        return self.data[idx]

定义预测训练精确度工具:

  简单讲一下,传入预测的y_hat与标签值y,在网络中y_hat = net(X),上文可知X和y均为for loader迭代的(bs, 单个x维度cwh);(bs),这里面X每一个是一张图片,是个张量,y每个是个标签值,是个标量。

  这里y_hat不经过softmax也没影响,因为exp是单增的,这里argmax返回的是一张图片预测的10个类别中最大的数值对应的位置,也就是返回对应的类别数字。

  这里的cmp是一个bool列表,包含0(False),1(True),在此为([True, True...]),再通过.sum()函数使之数值化累加,其中‘==’运算符对dtype很敏感,所以在用之前还要统一成y的dtype!

  最终返回的是预测正确的个数(格式为float)

def accuracy(y_hat, y):  # @save
    """计算预测正确的数量"""
    if len(y_hat.shape) > 1 and y_hat.shape[1] > 1:
        y_hat = y_hat.argmax(axis=1)
    cmp = y_hat.type(y.dtype) == y
    return float(cmp.type(y.dtype).sum())

定义任意数据集的精度检测工具

在这里传入的是自己定义的检测网络,需要评估分类精度的数据集。

这里X,y与前面说的尺寸一致,在此net(X)即为一个bs中的y_hat,这里的y即为一个bs中的标签向量。再通过累加工具加起来,最终返回=预测正确的个数/数据集总个数

def evaluate_accuracy(net, data_iter):  # @save
    """计算在指定数据集上模型的精度"""
    if isinstance(net, torch.nn.Module):
        net.eval()  # 将模型设置为评估模式
    metric = Accumulator(2)  # 正确预测数、预测总数
    with torch.no_grad():
        for X, y in data_iter:
            metric.add(accuracy(net(X), y), y.numel())
    return metric[0] / metric[1]

定义单个epoch训练流程

  这个train_epoch_ch3最终返回的的是训练损失值和精确度(正确预测/训练数据集总数),这里面的y.numel()表示计算y张量中所有元素个数。

  到最后这个返回的第一个值是计算出所有的loss后,除train中图片的总数,这才是整个eopch的损失平均值,如果改成float(l.mean()),然后不除metric[2],这表示的是计算每一个batch的loss平均数然后累加,是不太科学的,因为loss前面大后面小。

  loss经过交叉熵返回的是一个一维张量(bs,),每张照片对应一个loss值。其输入的y_hat是(bs,cls),y为(bs,)

def train_epoch_ch3_1(net, train_iter, loss, updater):
    """The training loop defined in Chapter 3.

    Defined in :numref:`sec_softmax_scratch`"""
    # Set the model to training mode
    if isinstance(net, torch.nn.Module):
        net.train()
    # Sum of training loss, sum of training accuracy, no. of examples
    metric = Accumulator(3)
    for X, y in train_iter:
        # Compute gradients and update parameters
        y_hat = net(X)
        l = loss(y_hat, y)
        if isinstance(updater, torch.optim.Optimizer):
            # Using PyTorch in-built optimizer & loss criterion
            updater.zero_grad()
            l.mean().backward()
            updater.step()
        else:
            # Using custom built optimizer & loss criterion
            l.sum().backward()
            updater(X.shape[0])
        metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())
    # Return training loss and training accuracy
    return metric[0] / metric[2], metric[1] / metric[2]

总训练函数(改正纯数字版本)

书里面的那个画图有时候不太直观表达出具体数是多少,所以我就把画图的部分删了,换成了直接输出数字的部分。

这个函数就是输入网络,训练、测试数据集loader,epoch数与优化器,即可返回你想要的损失与精确度

def train_ch3_1(net, train_iter, test_iter, loss, num_epochs, updater):
    for epoch in range(num_epochs):
        train_metrics = train_epoch_ch3_1(net, train_iter, loss, updater)
        test_acc = evaluate_accuracy(net, test_iter)
        print(f'训练损失{train_metrics[0]:.5f},精确度{train_metrics[1]:.5f},测试集{test_acc:.5f}')

最终的整体运行命令行:

if __name__ == '__main__':
    batch_size = 256
    train_iter, test_iter = load_data_fashion_mnist(batch_size)

    # 初始化模型参数
    net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))  # 线性层之前使用展平层调整输入的形状


    def init_weights(m):
        if type(m) == nn.Linear:
            nn.init.normal_(m.weight, std=0.1)


    net.apply(init_weights)

    # 损失
    loss = nn.CrossEntropyLoss(reduction='none')

    # 优化算法
    trainer = torch.optim.SGD(net.parameters(), lr=0.1)

    # 训练
    num_epoch = 10
    train_ch3_1(net, train_iter, test_iter, loss, num_epoch, trainer)

    # # 预测
    # d2l.predict_ch3(net, test_iter)
    # plt.show()

补充d2l.torch库里面缺失train_ch3函数 深度学习 d2l库 阅读详情

相关推荐

RK3588部署Qwen2-VL-2B:NPU驱动兼容性与多模态模型移植实战

多模态大模型(如Qwen2-VL)在边缘端部署,本质是异构计算单元(NPU)与模型张量流的深度协同问题。RKNPU2架构并非通用GPU,其硬件隔离内存、专用DMA通道及ABI敏感的ioctl接口,决定了模型可用性高度依赖驱动版本与固件匹配。0.9.8 NPU驱动通过内存一致性增强、模型签名校验和Qwen专属张量格式适配器,解决了ViT-L/14视觉编码器与Qwen2语言模型间的跨设备对齐难题。该方案广泛适用于工业质检、嵌入式视觉问答等低延迟本地推理场景,尤其支撑正点原子RK3588开发板(DL16Plus/

weixin_27017211的博客 238

d2l中各种内定函数的笔记

d2l中各种内定函数的笔记

python_innocent的博客 1489

【人脸识别】L2_Softmax Loss详解

论文题目:《L2-constrained Softmax Loss for Discriminative Face Verification》 论文地址:https://arxiv.org/pdf/1703.09507.pdf 1. 简介        CNN近年来取得了很大的成功,人脸识别也受益匪浅。人脸识别的一个基准包括一个序列网络和一个Softmax标准。在这篇论文中,作者分析了Softmax损失的一些劣势,然后提出一种基于约束条件

Roaddd的博客 1984

pytorch深度学习实战lesson12

模型的选择,过拟合和欠拟合

weixin_48304306的博客 1499

动手学深度学习 d2l文件

动手学深度学习 d2l文件

Ansys Lumerical 启动时出现 Error: Could not connect to Ansys license server specified at 1055@ 的一种解决办法

考虑到 2020 版的时候是直接在全局变量里指定具体地址,但是 2024 版本是写成 1055@localhost ,并且之后在站里搜相关 Ansys 的问题都指向 1055 端口被占用,虽然问题不一样,但是本着死马当活马医,就按照。我最近在跑超透镜结构,听说2024版本现在有GPU加速可以用,就把Lumerical从2020升到2024版本,结果发现一开头的破解办法完全不一样了。一开始安装的时候以为2020没有删干净,导致2024版的安装一直锁着目标地址,解决办法参考。的办法来操作,在关闭了。

qq_51404184的博客 5752

掩码(Mask)机制 结合 多头自注意力函数

本文实现了一个基于Eigen库的因果多头自注意力机制。核心参数包括序列长度L=4、特征维度D=512、8个注意力头(h=8),单头维度d_k=64。主要流程包含:1) 按行softmax归一化;2) 生成因果掩码矩阵;3) 实现带掩码的缩放点积注意力计算;4) 多头注意力集成。验证部分检查了注意力权重的非负性和行和为1特性,以及因果掩码确保未来Token不被关注的效果。最终输出维度为4×512,符合预期。该实现完整展示了Transformer中自注意力模块的核心计算逻辑。

2301_80140457的博客 256

标准化降水指数介绍

Mckee et al.(1993)认为降水量的减少是导致干旱的主要因素,其他气候因子一般变化较小,对干旱产生的影响不大,因此SPI使用降水量作为唯一参数。SPI能较好表达因降水量的大小反映干旱状况,操作简单,所需资料仅为降水量,同时该干旱指数在各个地区和各个时段都具有良好的计算稳定性,是继PDSI之后另一种被广泛应用的干旱指数。𝐻(𝑥)是Γ分布求得的概率,并当𝐻(𝑥)>0.5时,S=1;式中,𝛼是形状参数,𝛽是尺度参数,𝑥是当月降水量,𝛤(𝛼)是Gamma函数,用极大似然估计法计算最佳的𝛼和𝛽,即。

weixin_44259522的博客 2857

GQA矩阵运算逐步可视化:分组广播与张量形状详解

注意力机制是Transformer架构的核心,而分组查询注意力(GQA)通过让查询头共享键值头,在保持模型表达力的同时显著压缩KV缓存,成为主流大模型推理部署的关键技术。理解GQA不能停留在概念层面,必须掌握从投影、拆头、组内广播到注意力分数计算、掩码与Softmax归一化的每一步矩阵形状变化。本文以一个小规模可运行示例,配合Python可视化脚本,逐步拆解张量维度、广播逻辑和数值流向,帮助开发者直观排查组索引错位、Softmax维度写错等工程隐患。这些可视化方法既可用于模型调试,也能生成论文配图和KV c

weixin_29056701的博客 316

西门子1200之PID用法与控制

西门子PID加热试验

gyxgyx789的博客 6241

深入SVT SPI VIP配置:如何灵活控制CS间隔、数据帧大小与时钟频率(含代码片段)

本文深入探讨了SVT SPI VIP的高级配置技巧,包括精确控制CS信号间隔、突破数据帧大小限制以及动态时钟频率切换。通过实战代码片段和详细配置步骤,帮助验证工程师灵活应对复杂SPI协议验证场景,提升验证效率和覆盖率。特别适合需要处理非标准SPI时序和特殊数据帧的芯片验证项目。

weixin_27014595的博客 280

D2L项目教程:简洁实现Softmax回归的深度学习实践

D2L项目教程:简洁实现Softmax回归的深度学习实践 引言 在深度学习中,Softmax回归是解决多分类问题的基础模型。本文将基于D2L项目,介绍如何使用现代深度学习框架简洁高效地实现Softmax回归模型。我们将从理论到实践,全面解析实现过程中的关键技术和注意事项。 环境准备与数据加载 首先我们需要准备实验环境并加载数据集。这里我们使用Fashion-MNIST数据集,它包含10个类别的服装...

gitblog_00725的博客 399

惯性导航原理(九)-INS的初始对准-初始姿态确定+双矢量定姿

文章目录INS的初始对准INS初始化静基座/静态粗对准静态粗对准—加速度计调平原理加速度计调平静态粗对准—陀螺罗盘思考初始对准的影响因素双矢量定姿原理静态解析粗对准—双矢量定姿静态解析粗对准(续)其它初始对准方法精对准动对准 INS的初始对准 INS的初始对准为初始化的一部分 INS初始化 初始位置: 给定(INS没有初始位置确定的能力,例如从GPS ) 初始速度: 零(静止状态)或给定 初始姿态: 初始对准(INS有能力自己测资态) 粗对准vs. 精对准 静止状态vs. 运动状态 重要性: 失之毫厘,谬

十八与她的博客 1万+

Softmax、L-Softmax、A-Softmax的整理对比

目录 Large-Margin Softmax Loss  A-Softmax loss 附录 本文中对比了L-Softmax Loss 和A-Softmax loss两种变式,仅作为比较。对于两种损失函数的具体介绍见后期整理的论文笔记。 Large-Margin Softmax Loss  Large-Margin Softmax Loss(L-softmax)是在ICML2016中...

s000da的博客 9203

DevExpress中使用BandGridView实现复合(多行)表头、设置多行表头背景颜色、表格边框颜色

一、实现效果 二、 实现方法 2.1、创建复合表头 ①将创建的GridControl下的GirdView1转化为BandGridView类型; ②创建需要展示的列(指定列的名称【Name】、描述【caption】、数据字段名称【FieldName】) ③绑定列实现复合表头。 注意:如果复合表头有多行,则需要设置新增Band的Row Count,然后设置【Band properties下的AutoFillDown=false】 详细操作如下: 注意:如果要隐藏表格的设计字段内容,则需.

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2893

YOLOv13改进策略【注意力机制篇】| ICASSP 2023 EMA 高效多尺度注意力,跨空间学习提高远距离建模依赖

ICASSP 2023 EMA 高效多尺度注意力在 YOLOv13 的接入实战:跨空间学习提升远距离依赖建模,含原理图解、完整代码、yaml 配置与实测参数量对比(ultralytics 8.3.63)。

qq_53329130的博客 930

Softmax loss 之 Large Margin Softmax(L-softmax)

关于softmax、softmaxloss的详细介绍可见于:https://blog.csdn.net/u014380165/article/details/77284921 large margin softmax论文中说道,softmax+cross-entropy loss是CNNs中最为常见的代价组合,效果不错,但是没有对特征有区别的学习。所以论文基于它提出L-Softmax,强化特征的类内紧凑和类间疏离。 Softmax loss 1. 定义 Gamma公式展示 Γ(n)=(n−1)!∀n∈N\G

caicai的博客 1763

深度学习实战103-基于KDD Cup 99数据集的搭建神经网络的检测系统(NIDS),通过对网络流量数据进行分析,提供完整代码

接下来,我们定义一个全连接神经网络模型。return x# 创建数据集和数据加载器# 初始化模型通过以上步骤,我们实现了一个基于PyTorch的简单网络入侵检测系统。这个系统使用KDD Cup 99数据集进行训练和评估。实际应用中,您可以根据需求调整模型结构、超参数以及数据预处理方法。希望对大家有所帮助!如果有任何问题或需要进一步的解释,请随时咨询。

微学AI的博客 1582

d2l笔记:3.7 softmax回归的简洁实现

softmax 简洁实现细致分析

weixin_73545092的博客 1079

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

如何从零写出第一个深度学习模型:d2l-vi线性回归与Softmax回归完全教程

**d2l-vi** 是一本覆盖 PyTorch、TensorFlow、MXNet 三大框架的深度学习开源教程书,被全球 55 个国家、300 余所大学(含 MIT、Stanford、Harvard)采用。本教程将带你**从零亲手写出第一个深度学习模型**:先实现经典的**线性回归**(预测房价),再实现 **Softmax 回归**(图像分类),完整走通"数据管道 → 模型定义 → 损失函数 →

gitblog_00227的博客 878

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【动手学深度学习】softmax回归的简洁实现详情

本研究旨在深入理解softmax回归的原理与实现,通过从零开始和简洁实现两种方式,掌握其在分类任务中的应用。基于PyTorch框架,在GPU环境下完成模型构建、训练与评估,验证了其在Fashion-MNIST数据集上的有效性。实验中调整超参数并分析过拟合现象,提出早停、正则化等解决方案。研究体会表明,深度学习框架显著提升开发效率,模型性能可通过调参与结构优化持续改进。

朝花夕拾 3585

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

L2-constrained Softmax Loss for Discriminative Face Verification

摘要:softmax损失优化出来的特征不具有较高的类内相似度得分及较低的类间相似度得分。论文增加了特征描述子的L2约束,使得特征分布在具有固定半径的超球上。   大多数现有的使用softmax损失训练的DCNN方法倾向于在高质量的数据上过拟合,对于困难人脸常分类错误。作者通过观察发现,softmax损失学习到的特征的L2-norm是人脸图像质量的反映,高质量的人脸具有较大的L2-norm,模糊...

cv_family_z的博客 1890

L2-constrained Softmax Loss for Discriminative Face Verification

https://arxiv.org/abs/1703.09507 摘要   近年来,利用深度卷积神经网络(DCNNs),人脸验证系统的性能得到了显著改善。一个典型的人脸验证流程包括:使用softmax loss训练一个用于目标分类的深度网络,使用倒数第二层输出作为特征描述子,对一组人脸图像生成余弦相似度评分。softmax loss函数没有优化特征,使正对相似度更高,负对相似度更低,这导致性能差异。在本文中,我们对特征描述符增加了一个L2约束,限制它们位于一个固定半径的超球面上。这个模块可以使用现有的深度学

chenaxin的博客 514

L2-softmax

论文名称《L2-constrained Softmax Loss for Discriminative Face Verification》论文名称《L2-constrained Softmax Loss for Discriminative Face Verification》问题提出:人脸验证在LFW数据集上做的很好,但是在存在大量视角、分辨率、图像质量变化和遮挡时,验证效果并没有那么理想。主...

cdknight_happy的专栏 3009

从零实现Softmax回归 - d2l-zh项目详解

在机器学习实践中,我们经常面临分类问题:不是预测"多少",而是预测"哪一个"。比如判断邮件是否为垃圾邮件、识别图像中的物体类别、预测用户是否会订阅服务等。虽然线性回归擅长处理连续值预测,但对于分类任务,我们需要一种能够输出概率分布的模型——这就是Softmax回归的用武之地。 Softmax回归是多分类问题的基石,它能够将线性模型的输出转换为概率分布,为每个类别分配一个0到1之间的概率值,且所有...

gitblog_00428的博客 367

动手深度学习:简洁实现softmax的d2l版本问题

pip安装d2l的版本过高导致没有train_ch3,导致d2l.train_ch3报错。书本使用的是d2l的0.17.5版本,本人卸载d2l并尝试pip安装此版本时报错文件夹“拒绝访问”和“ImportError: DLL load failed: 找不到指定的模块”。尝试了网上很多方法后,通过下载d2l的whl包直接安装,问题解决。(使用0.17.5版本引用函数时注意函数名是否正确)以管理员身份打开prompt运行下载指令(注意运行时,把你下载的包放到运行指令的路径下)

m0_56161336的博客 1025
上一篇: d2l中各种内定函数的笔记
下一篇: d2l过拟合章节引申出多项式回归流程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值