【d2l动手学深度学习】 Lesson 10 多层感知机 + 代码实现 试验结果对比

news2024/9/23 23:24:56

文章目录

  • 1. 介绍
  • 2. 单层Softmax回归
    • 2.1 手写Softmax
      • 训练效果
    • 2.2 调用pytorch内置的softmax回归层实现
      • 调用pytorch内置softmax实验结果
      • 总结
  • 3. 一层感知机(MLP)+ Softmax
    • 实验结果
  • Reference
  • 写在最后


1. 介绍

在第十节课 多层感知机 的代码实现部分,做的小实验,介绍了对FashionMNIST(衣物)数据集进行十分类的神经网络实现效果,主要展示的是训练的Loss以及准确度的训练批次图,10个epoch


2. 单层Softmax回归

2.1 手写Softmax

Softmax函数,输入是一个二维张量

  1. 首先,对输入的矩阵进行求指数exp(X) , 不会改变矩阵大小
  2. 接着,对dim_1 进行求和,得到每个example的指数总和(下面公式的分母部分)
  3. 最后,将整个矩阵相除,得到指数归一化的输出(不改变矩阵形状)

softmax求和

softmax函数内部求和

def softmax(X):
    X_exp = torch.exp(X) # 1. 求指数
    partition = X_exp.sum(1, keepdim=True) # 2. 求和
    return X_exp / partition # keepdim to boardcast 3. 输出指数归一化矩阵 

这个函数在自定义的网络中net( X )调用

def net(X):
    # -1 means convert the dimension atomatically
    # the input shape X (256, 1, 28, 28) --> (28*28, 256)
    return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b)

最后,写一个epoch迭代
⚠️:这里面没有写梯度更新的函数,直接调用torch中的自动求道实现,也就是下文代码中的updater.step()

for X, y in train_iter:
        y_hat = net(X) # 将batch传入进去
        l = loss(y_hat, y) # 计算loss值
        if isinstance(updater, torch.optim.Optimizer):
            updater.zero_grad()
            l.backward() # 求梯度
            updater.step() # 根据梯度更新权重参数矩阵W
            metric.add(
                float(l) * len(y), accuracy(y_hat, y),
                y.size().numel())
        else:
            l.sum().backward()
            updater(X.shape[0])
            metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())

训练效果

手动实现的Softmax训练效果

手动实现的Softmax训练效果


2.2 调用pytorch内置的softmax回归层实现

⚠️:nn.CrossEntropyLoss()会在输出的时候自动应用Softmax进行求Loss(公式如下图所示)

net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))  

loss = nn.CrossEntropyLoss() # 损失函数 内嵌了Softmax函数

trainer = torch.optim.SGD(net.parameters(), lr=0.1) # 梯度下降优化器选择

在这里插入图片描述

Pytorch文档.CROSSENTROPYLOSS

调用pytorch内置softmax实验结果

内置Softmax实现

内置Softmax实现10分类的回归效果

总结

可以看到,调用torch内部实现的Softmax函数经过优化之后,相比手写的Softmax函数,迭代的过程更加稳定(抖动更小)


3. 一层感知机(MLP)+ Softmax

W1 = nn.Parameter(torch.randn(num_inputs, num_hiddens, requires_grad=True))
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))
W2 = nn.Parameter(torch.randn(num_hiddens, num_outputs, requires_grad=True))
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))

# function ReLU
def relu(X):
    a = torch.zeros_like(X)
    return torch.max(X, a)


# model
def net(X):
    X = X.reshape((-1, num_inputs)) # 行数自动调整(batch_size),列数规定
    H = relu(X @ W1 + b1)
    return (H @ W2 + b2)

loss = nn.CrossEntropyLoss() # 隐式实现 Softmax

实验结果

MLP实现

MLP实现的效果跟前面用单层的Softmax实现的效果差不多


Reference

  1. 李沐老师的课程网站地址 课程网址
  2. 动手学深度学习B站课程地址

写在最后

各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟!
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前后端分离项目-基于springboot+vue的足球青训俱乐部管理后台系统的设计与实现(内含代码+文档+报告)

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

4个不限字数的AI智能写作网站,用好任意一个就可以了

我们都在互联网上写过内容,有的人写社交媒体帖子、电子邮件或文本,有的人为我们的网站、产品描述、视频内容、广告甚至客户支持撰写内容。最近,*******推出了友好的类似聊天机器人的界面,使得AI写作更加容易访问,并迅速…

JVM上篇之类加载子系统

目录 类加载子系统 内存结构 类的生命周期 类的加载过程 加载 加载class文件方式 连接 验证 验证阶段 准备 解析 初始化 类加载器 介绍 作用 分类 引导类加载器 自定义类加载器 ClassLoader 获取ClassLoader途径 双亲委派机制 介绍 执行流程 好处 打破…

01-RocketMQ整体理解与快速实战

上一篇:RocketMQ从入门到精通汇总 一、MQ介绍 1、什么是MQ?为什么要用MQ? MQ:MessageQueue,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排队,然后按原来的顺序…

解决 Centos 安装 Python 3.10 的报错: Could not import runpy module

操作环境:CentOS 7、Gcc 4.8.5、Python 3.10.0 系统上已经有 2.x,3.6 版本的 Python 了,但是还是想装一个 3.10 的。因为刚写的脚本文件是较高版本的,在 3.6 上无法正常运行,Python 语法不是很了解,只能从…

[每周一更]-(第66期):Docker 守护进程说明

Docker 的优势 Build once, Run anywhere 上面这句话很精辟的总结了 docker 的优点。我从下面几点具体描述 docker 带给开发者的能力 应用标准化 无论什么语言开发的应用,我们都能用 dockerfile 和构建脚本方便的进行应用构建打包,代码库 构建 regis…

华为交换机vlan划分、telnet 管理地址配置

------1--- 1台核心交换时s5700 2台汇聚交换机S3700 6台PC -----2------ 创建vlan 10 20 30 s3700下PC1,PC2,PC3 S3700下PC4,PC5,PC6 VLAN10 PC1,PC2 VLAN20 PC3,PC4 VLAN30 PC5,PC6 -------3----- 要求实现: PC1,PC2互通; PC3,PC4互通; P…

【吞噬星空4】徐欣因祸得福,罗峰强势复仇,两大强者被杀,阿特金已开始自救

Hello,小伙伴们,我是小郑继续为大家深度解析吞噬星空国漫。 吞噬星空第89集预告已经出来了,从预告来看,信息量是真的多。从徐欣因祸得福到罗峰强势复仇,再到两大强者被杀,乃至于最后的阿特金已开始自救。那么多的不说&…

3分钟轻松实现网关网口远程监控安川PLC

EG网关网口连接安川PLC 目录 EG网关网口连接安川PLC 一. 准备工作 1.1 在对接前我们需准备如下物品 1.2 EG20网关准备工作 1.3 PLC准备工作 1.4 添加MEMOBUS协议 二. EMCP平台设置 2.1 新增EG设备 2.2 远程配置网关 2.3 网关绑定 2.4 通讯参数设置 2.5 创建设备驱动…

以单颗CMOS摄像头重构三维场景,维悟光子发布单目红外3D成像模组

维悟光子近期发布全新单目红外3D成像模组,现可提供下游用户进行测试导入。通过结合微纳光学元件编码和人工智能算法解码,维悟光子单目红外3D成像模组采用单颗摄像头,通过单帧拍摄,可同时获取像素级配准的3D点云和红外图像信息,可被应用于机器人、生物识别等广阔领域。 市场…

vxe是一款功能强大的table,有vue2/3版本

vxe-table v4https://vxetable.cn/#/table/start/install 当计算上千,上万条数据的和,或者算数平方根时可以使用web worker,来实现复杂,大量的计算,同时也不会造成浏览器的卡顿,暂时只是知道,还…

rxjava2源码分析

目录 一,Observable调用流程 1.1 简单Observable.create()创建调用流程 1.2 map操作符 1.3 flatmap操作符 1.4 subscribeOn操作符 1.5 observeOn操作符 一,Observable调用流程 1.1 简单Observable.create()创建调用流程 上面的这个流程图是下面这…

河北吉力宝搭建中国鞋业全产业链生态流通体系

中国鞋业,一直以来都是劳动密集型产业的代表,传统的制造和销售方式已经不能满足当今市场的需求。在这个充满机遇和挑战的时代,河北吉力宝旗下的品牌步力宝,以鞋为媒介,积极参与商业创新,正引领中国鞋业向前…

idea提交git项目,提交代码 点击commit一闪而过,没有反应的解决办法

idea提交git项目,提交代码 点击commit一闪而过,没有反应的解决办法 一般有两种情况导致一闪而过,一种为git设置问题,一种是编码问题,解决方案如下: 1、在单文件提交时不会遇到这种情况,但是在…

Java架构师缓存通用设计方案

目录 1 采用多级缓存2 缓存数据尽量前移3 静态化4 数据平衡策略5 jvm缓存的问题6 redis存放数据解决7 redis垂直拆分8 总结1 采用多级缓存 对于高性能的缓存设计呢,咱们前面按照专题详细去进行的讲解。那咱们现在结合着咱们实际的应用呢,再来确定一下咱们怎么去做这个高性能的…

colab切换目录的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【java|golang】多字段排序以及排序规则

奖励最顶尖的 K 名学生 给你两个字符串数组 positive_feedback 和 negative_feedback ,分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。 一开始,每位学生分数为 0 。每个正面的单词会给学生的分数 加 3 分,每个负面的词…

品牌低价的形式有哪些

线上产品五花八门,价格也有高低,但有时同一款商品,看似页面价一样,计算完促销信息后的到手价都会有所不同,有些店铺甚至会使用隐藏优惠券,如咨询客服领券、新人券等,而这些丰富的优惠方式&#…

华为OD机试 - 最大括号深度 - 栈stack(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

深入剖析 | 近期法院判决是不是司法部门有意平衡 SEC 监管天平

出品 |欧科云链研 究院 作者|Matthew Lee 9月27日,SEC 主席 Gary Gensler 参加了美国众议院金融服务委员会听证会。听证会审查 SEC 自 2021 年 10 月 5 日以来的一段时间内的监管发展、规则制定和活动,其中包括 SEC 提议修改“交易…