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

【机器学习】034_多层感知机Part.2_从零实现多层感知机

一、解决XOR问题

1. 回顾XOR问题:

        如图,如何对XOR面进行分割以划分四个输入 x 对应的输出 y 呢?

· 思路:采用两个分类器分类,每次分出两个输入 x,再借助这两个分类从而分出 y

        即采用同或运算,当两次分类的值相同时,输出为1;当两次分类的值不同时,输出为0.

        · 蓝色的线将1、3赋值1,2、4赋值0,从而分隔开;黄色的线将1、2赋值1,3、4赋值0;

        · 那么,如果两次赋值相同,即表示它们是第一类;不同表示他们是第二类,由此分类。

2. 如何利用感知机解决XOR问题

由上述原理可得,既然一层感知机无法处理XOR问题分类,那么可以用多个感知机函数来进行处理。用好几层分类多次,最后对之前的分类结果求和取一个算法,就得到了最终的分类结果。

二、多层感知机的代码实现

代码:

import torch
from torch import nn
from d2l import torch as d2l
# 继续使用fashion_mnist数据集进行分类操作,定义小批量数据
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)# 每张图片为28x28=784像素值,可看作784个特征值的具有10个类别的分类数据集
# 首先实现一个具有单隐藏层的多层感知机,包含256个隐藏单元,有输入->隐藏->输出三层
# W1: 输入层到隐藏层的权重矩阵,大小为 (num_inputs, num_hiddens)
# b1: 隐藏层的偏置项,大小为 (num_hiddens,)
# W2: 隐藏层到输出层的权重矩阵,大小为 (num_hiddens, num_outputs)
# b2: 输出层的偏置项,大小为 (num_outputs,)
# nn.Parameter 表示这些变量是模型参数,需要在训练过程中进行更新
# 乘以 0.01 是为了缩小初始化值的范围,有助于训练的稳定性
num_inputs, num_outputs, num_hiddens = 784, 10, 256W1 = 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]# 实现ReLU激活函数,返回max(0, x)
def relu(X):a = torch.zeros_like(X)return torch.max(X, a)# 实现模型,将输入的二维图像转化为一个一维向量,长度为num_inputs
def net(X):X = X.reshape((-1, num_inputs))H = relu(X@W1 + b1)  # 这里“@”代表矩阵乘法return (H@W2 + b2)# 实现损失函数
# 由于实现了softmax损失函数,使得不必在输出层调用sigmoid激活函数将输出值收缩到概率区间
# Softmax激活函数是sigmoid的推广,用于多分类问题的输出层。它会将输出归一化为概率分布,使得所有类别的预测概率总和为1
loss = nn.CrossEntropyLoss(reduction='none')# 训练模型,迭代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)

相关文章:

【机器学习】034_多层感知机Part.2_从零实现多层感知机

一、解决XOR问题 1. 回顾XOR问题: 如图,如何对XOR面进行分割以划分四个输入 对应的输出 呢? 思路:采用两个分类器分类,每次分出两个输入 ,再借助这两个分类从而分出 。 即采用同或运算,当两…...

2023年中职“网络安全“—Web 渗透测试①

2023年中职"网络安全"—Web 渗透测试① Web 渗透测试任务环境说明:1.访问地址http://靶机IP/task1,分析页面内容,获取flag值,Flag格式为flag{xxx};2.访问地址http://靶机IP/task2,访问登录页面。…...

Android——资源IDnonFinalResIds和“Attribute value must be constant”错误

一、异常描述 通过资源ID引用资源提示错误 Attribute value must be constant 二、解决方案 在根目录下的文件 gradle.properties 中添加如下配置,然后Sync Project android.nonFinalResIdsfalse 三、问题原因 android.nonFinalResIds 是Android开发中一个用于解…...

批量创建表空间数据文件(DM8:达梦数据库)

DM8:达梦数据库 - - 批量创建表空间数据文件 环境介绍1 批量创建表空间SQL2 达梦数据库学习使用列表 环境介绍 在某些场景(分区表子表)需要批量创建表空间,给不同的表使用,以下代码是批量创建表空间的SQL语句; 1 批量创建表空间SQL --创建 24个数据表空间,每个表空间有3个数…...

简单聊聊加密和加签的关系与区别

大家好,我是G探险者。 平时我们在项目上一定都听过加密和加签,加密可能都好理解,知道它是保障的数据的机密性,那加签是为了保障啥勒?它和加密有啥区别? 带着这个疑问,我们就来聊聊二者的区别。…...

视频转码方法:多种格式视频批量转FLV视频的技巧

随着互联网的发展,视频已成为日常生活中不可或缺的一部分。然而,不同的视频格式可能适用于不同的设备和平台,因此需要进行转码。在转码之前,要了解各种视频格式的特点和适用场景。常见的视频格式包括MP4、AVI、MKV、FLV等。其中&a…...

【Java 进阶篇】Redis 数据结构:轻松驾驭多样性

引言 Redis是一款强大的键值对存储系统,其数据结构的多样性是其引以为傲的特点之一。在这篇博客中,我们将深入探讨Redis的主要数据结构,包括字符串、哈希表、列表、集合和有序集合,并通过实例代码演示它们的用法。 1. 字符串&am…...

东用科技智能公交识别系统无线传输方案

在科技不断进步和人工智能快速发展的当下,人脸识别技术已逐渐应用于各个领域。其中,公共交通领域便是重要的应用场景之一。人脸识别技术的引入可以提高交通的安全性、效率及便利性。 为了实现公交公司对乘客的身份识别和安全管理的需求,提高运…...

Django批量插入数据及分页器

文章目录 一、批量插入数据二、分页1.分页器的思路2.用一个案例试试3.自定义分页器 一、批量插入数据 当我们需要大批量创建数据的时候,如果一条一条的去创建或许需要猴年马月 我们可以先试一试for循环试试 我们首先建立一个模型类来创建一个表 models.py&#xff…...

PHP 语法||PHP 变量

PHP 脚本在服务器上执行&#xff0c;然后将纯 HTML 结果发送回浏览器。 基本的 PHP 语法 PHP 脚本可以放在文档中的任何位置。 PHP 脚本以 <?php 开始&#xff0c;以 ?> 结束&#xff1a; <?php // PHP 代码 ?> 值得一提的是&#xff0c;通过设定php.ini的相…...

【python基础(四)】if语句详解

文章目录 一. 一个简单示例二. 条件测试1. 检查多个条件1.1. 使用and关联多个条件1.2. 使用or检查多个条件1.3. in的判断 2. 布尔表达式 三. if语句1. 简单的if语句2. if-else语句3. if-elif-else结构4. 使用多个elif代码块5. 省略else代码块 四. 使用if语句处理列表1. 检查特殊…...

Spring Boot中常用的参数传递注解

RequestParam&#xff1a;用于将请求参数绑定到控制器处理方法的参数上&#xff0c;适用于GET请求。PathVariable&#xff1a;用于获取请求URL中的动态参数&#xff0c;适用于RESTful风格的URL。RequestBody&#xff1a;用于将请求体中的JSON字符串绑定到控制器处理方法的参数上…...

Quartz .Net 的简单使用

参考了&#xff1a;c# .net framework 4.5.2 , Quartz.NET 3.0.7 - runliuv - 博客园 (cnblogs.com) https://www.cnblogs.com/personblog/p/11277527.html&#xff0c; Quartz.NET 作业调度&#xff08;一&#xff09;&#xff1a;Test - 简书 自己要轮询的任务&#xff1a…...

面试Java笔试题精选解答

文章目录 热身级别数组中重复的数字思路&#xff1a;使用map或HashSet来遍历一遍就可以找出重复的字符样例解答 用两个栈实现队列思路&#xff1a;Stack1正向进入&#xff0c;队头在栈底&#xff0c;用于进队列操作&#xff1b;Stack2是Stack1倒栈形成&#xff0c;队头在栈顶&a…...

使用Python画一棵树

&#x1f38a;专栏【不单调的代码】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f339;Turtle模块&#x1f384;效果&#x1f33a;代码&#x1f6f8;代码…...

nginx学习(4)Nginx 负载均衡

负载均衡&#xff1a;是将负载分摊到不同的服务单元&#xff0c;既保证服务的可用性&#xff0c;又保证响应 足够快&#xff0c;给用户很好的体验。 在 linux 下有 Nginx、LVS、Haproxy 等等服务可以提供负载均衡服 务&#xff0c; 而且 Nginx 提供了几种分配方式(策略)&#…...

WSL登录时提示nsenter: cannot open /proc/320/ns/time: No such file or directory的解决办法

在登录 WSL 的 Ubuntu 时&#xff0c;不仅要求 root 权限&#xff0c;还登录失败&#xff0c;提示“nsenter: cannot open /proc/320/ns/time: No such file or directory”。 解决办法是在 powershell 中执行 “wsl – sudo vi /etc/profile”命令&#xff0c;删除文件内容&a…...

git修改远程分支名称

先拉取old_branch最新代码到本地 git checkout old_branchgit pull origin old_branch本地修改后并推送 git branch -m old_branch new_branch # 修改分支名称git push --delete origin old_branch # 删除在远程的老分支推送新分支 git push origin new_branch本地分支与远…...

Django 入门学习总结7-静态文件管理

Django Web框架有关门的静态文件管理机制。 首先&#xff0c;在polls文件夹中创建static文件&#xff0c;Django 将会自动地在这里查询静态文件。 Django 框架在配置 STATICFILES_FINDERS中&#xff0c;指出了一系列静态文件所在位置。 依据配置 INSTALLED_APPS 的名称来查询…...

游戏开发引擎Cocos Creator和Unity如何对接广告-AdSet聚合广告平台

在游戏开发方面&#xff0c;游戏引擎的选择对开发过程和最终的产品质量有着重大的影响&#xff0c;Unity和Cocos是目前全球两大商用、通用交互内容开发工具&#xff0c;这两款引擎受到广泛关注&#xff0c;本文将从多个维度对两者进行比较&#xff0c;为开发者提供正确的选择建…...

从Jupyter Notebook一键转生产沙箱:3步实现AI代码自动容器化+依赖锁定+网络策略注入(2026 Docker Desktop 4.32新功能深度拆解)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Docker Sandbox 运行 AI 代码隔离技术 2026 最新趋势 随着大模型推理服务与第三方 AI 工具链的爆发式增长&#xff0c;安全执行不可信用户代码成为云原生 AI 平台的核心挑战。Docker Sandbox 技术正从轻…...

【maaath】 为开源鸿蒙 Flutter 跨平台工程集成扫码识别能力

为开源鸿蒙 Flutter 跨平台工程集成扫码识别能力欢迎加入开源鸿蒙跨平台社区&#xff1a; https://openharmonycrossplatform.csdn.net 作者&#xff1a;maaath前言 在移动应用开发中&#xff0c;扫码识别是最常见的功能之一&#xff0c;涵盖二维码、条形码、Data Matrix 等多种…...

比话降AI知网实测:AI率从84.9%降到1.4%全程数据2026

比话降AI知网实测&#xff1a;AI率从84.9%降到1.4%全程数据2026 答辩前 36 小时&#xff0c;朋友的硕士论文知网 AIGC 跑出 84.9%&#xff0c;几乎是"全文标红"的级别。这种分数靠人工改根本来不及&#xff0c;最后用比话降AI 跑了一次完整流程&#xff0c;结果回到 …...

从功能机之王到AI基础设施巨头,诺基亚如何抓住5G与AI风口实现转型?

诺基亚转型现状在不少国人眼中&#xff0c;功能机之王诺基亚早已溃败&#xff0c;但实际上它比很多大企业活得更好&#xff0c;转身成为风口上的公司。今年4月以来&#xff0c;诺基亚股价一路攀升&#xff0c;截至4月20日&#xff0c;市值超过600亿美元&#xff0c;约合人民币4…...

梯度提升算法(GBDT)实战:四大库对比与优化技巧

1. 梯度提升算法家族概览在机器学习实战中&#xff0c;梯度提升&#xff08;Gradient Boosting&#xff09;堪称解决结构化数据问题的"瑞士军刀"。不同于随机森林的并行决策树策略&#xff0c;梯度提升采用串行方式构建模型&#xff0c;每一轮都针对前一轮的预测残差…...

5 种实用方法:在电脑上批量 / 群发短信息

许多企业、社群和机构都把群发短信作为官方沟通渠道&#xff0c;方便触达大量人群。它操作简单、成本低廉&#xff0c;远低于昂贵的媒体广告&#xff0c;因此十分流行。本文将介绍4 种最可靠的电脑群发短信方法。方法 1&#xff1a;通过 iReaShare Android Manager 在电脑群发短…...

PWRC(电源控制器) - 功耗的阀门:深入睡眠模式、唤醒源与电压调节的省电艺术

该文章同步至OneChan 当电池供电的设备需要运行数年&#xff0c;如何通过睡眠模式、动态电压调节和唤醒源管理&#xff0c;在性能和功耗之间做出精妙取舍&#xff1f; 导火索&#xff1a;一个低功耗设备的“神秘”电池耗尽 在一个无线传感器节点中&#xff0c;设计目标是在一…...

多机器人强化学习中的动态采样优化策略

1. 项目背景与核心挑战在工业自动化与智能仓储领域&#xff0c;多机器人协同作业已成为提升效率的关键方案。我们团队最近在开发一套基于强化学习的多机器人控制系统时&#xff0c;遇到了一个典型难题&#xff1a;当20台AGV小车在3000平米仓库中同时运行时&#xff0c;传统经验…...

别再只调库了!用STM32 HAL库底层驱动LCD1602和DHT11,搞懂时序是关键

深入解析STM32 HAL库驱动LCD1602与DHT11的时序控制实战 1. 嵌入式开发中的时序控制核心地位 在嵌入式系统开发中&#xff0c;时序控制就像交响乐团的指挥棒&#xff0c;精确协调着各个硬件模块的工作节奏。当我们从简单的库函数调用转向底层驱动开发时&#xff0c;时序问题往往…...

5分钟打造专属AI歌手:用Retrieval-based-Voice-Conversion-WebUI实现零门槛语音克隆

5分钟打造专属AI歌手&#xff1a;用Retrieval-based-Voice-Conversion-WebUI实现零门槛语音克隆 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/R…...