当前位置: 首页 > news >正文

机器学习深度学习——多层感知机的从零开始实现

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er
🌌上期文章:机器学习&&深度学习——多层感知机
📚订阅专栏:机器学习&&深度学习
希望文章对你们有所帮助

为了与之前的softmax回归获得的结果进行比较,将继续使用Fashion-MNIST图像分类数据集。

import torch
from torch import nn
from d2l import torch as d2lbatch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

多层感知机的从零开始实现

  • 初始化模型参数
  • 激活函数
  • 模型
  • 损失函数
  • 训练
  • 预测

初始化模型参数

数据集的每个图像由28×28=784个灰度像素值组成。所有图像分为10个类别。
忽略像素间的空间结构,我们可以将每个图像视为具有784个输入特征和10个类的简单分类数据集。
首先,我们将实现一个具有单隐藏层的多层感知机,它包含256个隐藏单元。注意,我们可以将这两个变量都视为超参数。通常,我们选择2的若干次幂作为层的宽度。因为内存在硬件的分配和寻址方式,这么做往往可以在计算上更高效。
我们用几个张量来表示我们的参数。注意,对于每一层我们都要记录一个权重矩阵和一个偏置向量。并要为这些参数的梯度分配内存。

num_inputs, num_outputs, num_hiddens = 784, 10, 256
W1 = nn.Parameter(torch.randn(num_inputs, num_hiddens, requires_grad=True) * 0.01)
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))
W2 = nn.Parameter(torch.randn(num_hiddens, num_outputs, requires_grad=True) * 0.01)
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))
params = [W1, b1, W2, b2]

激活函数

这里就不用内置的了,自己实现一下:

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

模型

既然忽略了空间结构,那就直接用reshape将每个二维图像转换为一个长度为num_inputs的向量:

def net(X):X = X.reshape((-1, num_inputs))H = relu(X@W1 + b1)  # "@"表示矩阵乘法return (H@W2 + b2)

损失函数

之前已经从零实现过了softmax函数,这里直接用内置函数计算softmax和交叉熵损失(为什么要计算这两个,之前在softmax的简洁实现中曾经证明过)

loss = nn.CrossEntropyLoss(reduction='none')

训练

训练过程和softmax一样,直接调用d2l的train_ch3函数就行了,将迭代周期数设为10,学习率设为0.1。

num_epochs, lr = 10, 0.1
updater = torch.optim.SGD(params, lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater)

预测

对模型进行评估,我们在测试数据上应用这个模型。

d2l.predict_ch3(net, test_iter)
d2l.plt.show()

在这里插入图片描述

相关文章:

机器学习深度学习——多层感知机的从零开始实现

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——多层感知机 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮助 为…...

Redis的基本使用命令

Redis的使用命令 Redis是一个开源的使用ANSI C编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash…...

Ts入门到放弃

TS 的核心能力在于给 JS 提供静态类型检查,是有类型定义的 JS 的超集,包括 ES5、ES5 和其他一些诸如泛型、类型定义、命名空间等特征的集合。 本次仅会针对类型声明部分配合示例进行着重介绍,更详细的内容以及特性可以查看 Typescript handb…...

黑客技术(网络安全)学习笔记

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识,可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题,可以帮助您更好地解决网络安全的原理和技术…...

Cloud Kernel SIG 月度动态:支持龙芯和申威架构,合入两个内存新特性

Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 Cloud Kernel 开始支持龙芯和申威架构。 合入两个内存新特性:MEMCG LRU LOCK 和…...

IDEA中连接虚拟机 管理Docker

IDEA中连接虚拟机 管理Docker 📔 千寻简笔记介绍 千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳,如果文章对你有帮…...

Debezium日常分享系列之:定制Debezium 信号发送和通知

Debezium日常分享系列之:定制Debezium 信号发送和通知 一、自定义信号和通知通道二、结论 Debezium 2.3 在信号和通知功能方面引入了新的改进。除了 Debezium 提供的预定义信号和通知通道之外,您还可以设置新的信号和通知通道。此功能使用户能够自定义系…...

RpcProvider(rpc服务提供者)实现思路

RpcProvider&#xff08;服务提供者&#xff09;实现思路 上一节说到&#xff0c;如何将一个本地服务发布成远程服务&#xff0c;但没有说明一个rpc框架怎么进行调用的&#xff0c;看看上节代码 #include <iostream> #include <string> #include "user.pb.h…...

GNSS技术知识你知道多少?这些你或许还未掌握

GNSS信号频段 GNSS频谱图展示了不同的GNSS信号及其星座、载波频率、调制方案&#xff0c;以及所有这些信号在同一L波段频段内如何相互关联&#xff0c;是GNSS专业人员的必备工具&#xff0c;包括设计和开发GNSS系统的工程师&#xff0c;以及测试GNSS系统的工程师。 GNSS术语 …...

YOLOv8教程系列:三、使用YOLOv8模型进行自定义数据集半自动标注

YOLOv8半自动标注 目标检测半自动标注的优点包括&#xff1a; 1.提高标注效率&#xff1a;算法能够自动标注部分数据&#xff0c;减少了人工标注的工作量&#xff0c;节省时间和资源。 2.降低成本&#xff1a;自动标注可以减少人工标注的成本&#xff0c;特别是对于大规模数据…...

AI聊天GPT三步上篮!

1、是什么&#xff1f; CHATGPT是OpenAI开发的基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构的聊天型人工智能模型。也就是你问它答&#xff0c;根据网络抓去训练 2、怎么用&#xff1f; 清晰表达自己诉求&#xff0c;因为它就是一个AI助手&#…...

如何彻底卸载VMware

目录 第一章、停止并卸载VMware程序1.1&#xff09;停止VMware有关的服务1.2&#xff09;打开任务管理器停止进程1.3&#xff09;卸载VMware程序 第二章、残留文件删除2.1&#xff09;打开注册表2.2&#xff09;删除注册表残留文件2.3&#xff09;C盘文件删除 友情提醒&#xf…...

[个人笔记] Windows配置NTP时间同步

Windows - 运维篇 第六章 Windows配置NTP时间同步 Windows - 运维篇系列文章回顾Windows配置NTP时间同步域控环境的NTP配置工作组环境的NTP配置Windows的CMD部分命令集 参考来源 系列文章回顾 第一章 迁移WinSrv系统到虚拟机 第二章 本地安全策略xcopy实现实时备份文件夹内容 …...

Jetson Docker 编译 FFmpeg 支持硬解nvmpi和cuvid

0 设备和docker信息 设备为NVIDIA Jetson Xavier NX&#xff0c;jetpack版本为 5.1.1 [L4T 35.3.1] 使用的docker镜像为nvcr.io/nvidia/l4t-ml:r35.2.1-py3,详见https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 使用下列命令拉取镜像: sudo docker pull nvcr…...

某某某小说app接口抓包分析

详细说明查看原文 https://sdk.qzbonline.com/ver9/shuhuajs/sdk/ioszh_shuhuajs_conf.htmlhttps://sdk.qzbonline.com/prov8/ymqxs/sdk/ios_ymqxs_conf.htmlhttps://sdk.qzbonline.com/prov8/ymqxs/sdk/ios_ymqxs_conf2.htmlhttps://sdk.qzbonline.com/prov8/fqhyxs/sdk/iosz…...

开发一个RISC-V上的操作系统(四)—— 内存管理

目录 往期文章传送门 一、内存管理简介 二、Linker Script 链接脚本 三、动态分配内存 四、测试 往期文章传送门 开发一个RISC-V上的操作系统&#xff08;一&#xff09;—— 环境搭建_riscv开发环境_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统&#xff08;二…...

区块链:可验证随机函数

本篇主要介绍可验证随机函数的定义及其在区块链上的作用。 1 可验证随机函数 1.1 定义 可验证随机函数(Verifiable Random Function&#xff0c;VRF)本质上还是一类具有验证功能的伪随机函数。对于一个特定的输入 m m m以及输入者的私钥 S K SK SK&#xff0c;VRF会输出一个随…...

Flask中flask-session

Flask中flask-session Flask-Session是一个为Flask应用程序开发的工具&#xff0c;允许您轻松处理服务器端会话。会话是存储和追踪用户特定数据的方式。例如&#xff0c;当用户登录到应用程序时&#xff0c;他们的状态&#xff08;即登录状态&#xff09;可以保存在会话中&…...

react-Native init初始化项目报错”TypeError: cli.init is not a function“

文章目录 一、问题&#xff1a;二、解决&#xff1a; 一、问题&#xff1a; 在react-native init appDemo 创建项目时&#xff0c;报错TypeError: cli.init is not a function。 二、解决&#xff1a; 产生这个问题的原因是&#xff1a;使用这种方式创建工程&#xff0c;rea…...

【gitlib】linux系统rpm安装gitlib最新版本

目录 下载gitlib安装包 安装需要的依赖 设置开机启动 安装邮件服务器并设置开机启动 rpm执行安装gitlib 修改gitlib.rb文件的属性 修改完毕后执行更新配置 查看gitlib运行 查看gitlib初始化root密码 gitlib入口访问地址 下载gitlib安装包 Index of /gitlab-ce/yum/el7/…...

Ansible Playbook实战指南:从基础到高级技巧全解析

1. Ansible Playbook基础入门 第一次接触Ansible Playbook时&#xff0c;我被它简洁的YAML语法和强大的自动化能力惊艳到了。记得当时需要给50台服务器部署Nginx&#xff0c;传统方式要手动操作每台机器&#xff0c;而用Playbook只花了10分钟就搞定了全部部署。这种效率提升让我…...

智能车竞赛备赛利器:用快马AI快速搭建算法仿真原型

智能车竞赛备赛利器&#xff1a;用快马AI快速搭建算法仿真原型 参加智能车竞赛的同学都知道&#xff0c;算法调试和硬件交互是最耗时的环节之一。传统开发流程中&#xff0c;光是搭建仿真环境就要花上好几天&#xff0c;更别说反复调试参数了。最近我发现InsCode(快马)平台能帮…...

计算机毕业设计:Python汽车销量全栈分析系统 Flask框架 可视化 机器学习 AI 大模型 大数据(建议收藏)✅

1、项目介绍 技术栈&#xff1a;Python语言、Flask框架、ECharts可视化库、MySQL数据库、机器学习算法 功能模块&#xff1a;数据概况展示模块多维度可视化分析模块销量预测模块生产计划辅助模块系统管控模块 项目介绍&#xff1a;本项目为汽车销量可视化分析与预测系…...

Python脚本:一键将图片按顺序合成PDF

&#x1f4cc; 前言在日常工作和学习中&#xff0c;我们经常需要将多张图片&#xff08;如扫描件、截图、照片&#xff09;合并成一个PDF文件。虽然有很多现成的工具可以实现&#xff0c;但用Python自己写一个脚本不仅灵活&#xff0c;还能避免上传到第三方网站带来的隐私风险。…...

计算机毕业设计:Python地铁数据可视化分析系统 Flask框架 数据分析 可视化 高德地图 数据挖掘 机器学习 爬虫(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W&#xff0c;前互联网大厂软件研发、集结硕博英豪成立软件开发工作室&#xff0c;专注于计算机相关专业项目实战6年之久&#xff0c;累计开发项目作品上万套。凭借丰富的经验与专业实力&#xff0c;已帮助成千上万的学生顺利毕业&#xff0c;…...

层叠与优先级介绍

层叠 层叠是 CSS 的核心机制&#xff0c;用于解决同一元素同一属性被多个样式声明设置时的冲突问题。浏览器按照严格的优先级规则&#xff0c;从低到高逐层比较&#xff0c;最终确定哪个声明生效。 术语解释 名次 解释 有三种层叠来源类型 用户代理样式表、用户样式表和作…...

GHelper终极指南:如何用开源工具彻底掌控华硕笔记本性能

GHelper终极指南&#xff1a;如何用开源工具彻底掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...

资深大模型工程师详细讲解:RAG召回率优化三重微调实战

✅ 一、核心策略再解构&#xff1a;从“三层次”到“五维协同链路”原有“数据-索引-查询”三层结构非常精准&#xff0c;但为了更贴近企业级复杂场景&#xff0c;我们进一步抽象为 五维协同链路&#xff1a;维度关键目标是否可微调微调切入点1. 数据生成质量构建高质量正负样本…...

119. 使用 Fluentd concat 过滤器插件在牧场日志中串接多行日志

Situation 地理位置Logs of multiple lines are separated across multiple log events within Pod logs and there is a need to combine them into a single event before forwarding them to a logging solution. 多行日志在 Pod 日志中被分隔在多个日志事件中&#xff0c;…...

BROADCHIP广芯 BCT0104EGD-TR QFN 转换器/电平移位器

特性 无需方向控制信号数据速率 24Mbps(推) 2Mbps(开漏) A端口1.65V至5.5V&#xff0c;B端口2.3V至5.5V(VCCA < VCCB) VCC隔离:若任一VCC接地&#xff0c;则两个端口均处于高阻抗状态 无需电源供应顺序&#xff0c;VCCA或VCCB可先斜坡上升 lOFF:支持部分断电模式操作 提供QF…...