pytorch学习——多层感知机

news2024/11/23 13:43:46

一.感知机

        感知机——神经网络基本单元,最简单的深度网络称为多层感知机。多层感知机由多层神经元组成,每一层与它上一层相连,从中接收输入, 同时每一层也与它的下一层相连,影响当前层的神经元。

 

 解释:如果正确分类,-y<W,X>小于0,即该分类点对应的损失函数的值为0;如果错误分类,则-y<W,X>大于等于0,并进入梯度下降算法的计算。

 示例:以下图中猫狗分类为例,其中黑线表示区分猫和狗的轴

 当输入一直新的狗时,原来的线会导致分类错误,得更新

 

 收敛定理:什么时候能够停止?

 r指数据大小

感知机存在的问题:不能拟合异或问题——不能通过线性完成此问题的分类

 感知机的局限性就在于它只能表示由一条直线分割的空间。图8这样弯曲的曲线无法用感知机表示。另外,由下图这样的曲线分割而成的空间称为非线性空间。

 总结:

1.感知机是一个二分类模型,是最早的AI模型之一

2.它的求解算法等价于使用批量大小为1的梯度下降

3.不能拟合异或函数(XOR)函数

二、感知机的实现

2.1简单感知机的实现

        先定义一个接收参数x1和x2的AND函数。(实现与门)

def AND(x1, x2):
	w1, w2, theta = 0.5, 0.5, 0.7
	tmp = x1*w1 + x2*w2
	if tmp <= theta:
		return 0
	elif tmp > theta:
		return 1

        在函数内初始化参数w1、 w2、 theta,当输入的加权总和超过阈值时返回1,否则返回0。我们来确认一下输出结果是否如图2 与门真值表所示。测试结果如下所示:

AND(0, 0) # 输出0
AND(1, 0) # 输出0
AND(0, 1) # 输出0
AND(1, 1) # 输出1

2.2导入权重和偏置

     b称为偏置, w1和w2称为权重

 实现与门

def AND(x1, x2):
	x = np.array([x1, x2])
	w = np.array([0.5, 0.5])
	b = -0.7
	tmp = np.sum(w*x) + b
	if tmp <= 0:
		return 0
	else:
		return 1

类似,可以继续实现或门和非门

def NAND(x1, x2):
	x = np.array([x1, x2])
	w = np.array([-0.5, -0.5]) # 仅权重和偏置与AND不同!
	b = 0.7
	tmp = np.sum(w*x) + b
	if tmp <= 0:
		return 0
	else:
		return 1
		
def OR(x1, x2):
	x = np.array([x1, x2])
	w = np.array([0.5, 0.5]) # 仅权重和偏置与AND不同!
	b = -0.2
	tmp = np.sum(w*x) + b
	if tmp <= 0:
		return 0
	else:
		return 1

三.多层感知机

        可以解决单层感知机不能实现异或的问题,例如,可以通过蓝色线分类的结果乘以黄色线分类结果来实现异或

 

 输入输出都是固定的,唯一能做的就是设置隐藏层大小

 这个多层感知机有4个输入,3个输出,其隐藏层包含5个隐藏单元。 输入层不涉及任何计算,因此使用此网络产生输出只需要实现隐藏层和输出层的计算。 因此,这个多层感知机中的层数为2。 注意,这两个层都是全连接的。 每个输入都会影响隐藏层中的每个神经元, 而隐藏层中的每个神经元又会影响输出层中的每个神经元。

 因为不加非线性层的话,输出还是线性函数(仍然不能解决XOR),还是相当于单层

四.激活函数

        激活函数(activation function)通过计算加权和并加上偏置来确定神经元是否应该被激活, 它们将输入信号转换为输出的可微运算。 大多数激活函数都是非线性的。 由于激活函数是深度学习的基础,下面简要介绍一些常见的激活函数。

4.1Relu函数

 

x = torch.arange(-8.0, 8.0, 0.1, requires_grad=True)
y = torch.relu(x)
d2l.plot(x.detach(), y.detach(), 'x', 'relu(x)', figsize=(5, 2.5))

         当输入为负时,ReLU函数的导数为0,而当输入为正时,ReLU函数的导数为1。 注意,当输入值精确等于0时,ReLU函数不可导。 在此时,我们默认使用左侧的导数,即当输入为0时导数为0。 我们可以忽略这种情况,因为输入可能永远都不会是0。  下面我们绘制ReLU函数的导数。

y.backward(torch.ones_like(x), retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of relu', figsize=(5, 2.5))

 4.2sigmoid函数

 下面,我们绘制sigmoid函数。 注意,当输入接近0时,sigmoid函数接近线性变换。

y = torch.sigmoid(x)
d2l.plot(x.detach(), y.detach(), 'x', 'sigmoid(x)', figsize=(5, 2.5))

 sigmoid函数的导数图像如下所示。 注意,当输入为0时,sigmoid函数的导数达到最大值0.25; 而输入在任一方向上越远离0点时,导数越接近0。

# 清除以前的梯度
x.grad.data.zero_()
y.backward(torch.ones_like(x),retain_graph=True)
d2l.plot(x.detach(), x.grad, 'x', 'grad of sigmoid', figsize=(5, 2.5))

多层感知机和softmax的区别就是加一个非线性层 

 五.总结

1.多层感知机使用隐藏层和激活函数来得到非线性模型

2.常用激活函数——sigmoid,Relu,Tanh

3.使用softmax来处理多类分类

4.超参数为隐藏层数,和各个隐藏层的大小

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

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

相关文章

分布式I/O,IT和OT融合少不了它

长期以来信息技术IT和操作运营技术OT是相互隔离的&#xff0c;随着大数据分析和边缘计算业务的对现场级实时数据的采集需求&#xff0c;IT和OT有了逐渐融合的趋势。IT与OT融合&#xff0c;它赋予工厂的管理者监控运行和过程的能力大为增强&#xff0c;甚至可以预测到可能发生的…

Vue2到3 全套学习内容(持续更新)

Vue 初次上手 1. Vue 概念 概念: Vue 是一个用于 构建用户界面 的 渐进式 框架 ①构建用户界面&#xff1a;基于数据动态渲染出用户看到的页面 ②渐进式&#xff1a;循序渐进 Vue的两种使用方式: ①Vue 核心包开发 场景: 局部 模块改造 ②Vue核心包&Vue插件工程化开发…

Echarts 地图点击板块高亮,再次点击还是高亮,在地图外点击返回,则不高亮。

需求就是&#xff1a;点击广东省板块&#xff0c;广东省高亮&#xff0c;再次点击广东省还是高亮&#xff0c;如果再点击内蒙古&#xff0c;则内蒙古高亮&#xff0c;广东不高亮。 点击返回全国&#xff0c;则都不高亮。 1、返回全国 //返回全国 backQG(){ this.clickCity 全…

多租户分缓存处理

多租户redis缓存分租户处理 那么数据库方面已经做到了拦截&#xff0c;但是缓存还是没有分租户&#xff0c;还是通通一个文件夹里&#xff0c; 想实现上图效果&#xff0c;global文件夹里存的是公共缓存。 首先&#xff0c;那么就要规定一个俗称&#xff0c;缓存名字带有globa…

安全学习DAY08_算法加密

算法加密 漏洞分析、漏洞勘测、漏洞探针、挖漏洞时要用到的技术知识 存储密码加密-应用对象传输加密编码-发送回显数据传输格式-统一格式代码特性混淆-开发语言 传输数据 – 加密型&编码型 安全测试时&#xff0c;通常会进行数据的修改增加提交测试 数据在传输的时候进行…

Kotlin基础(八):泛型

前言 本文主要讲解kotlin泛型&#xff0c;主要包括泛型基础&#xff0c;类型变异&#xff0c;类型投射&#xff0c;星号投射&#xff0c;泛型函数&#xff0c;泛型约束&#xff0c;泛型在Android中的使用。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 泛型基…

protobuf入门实践1

protobuf入门实践1 下载和安装 protobuf&#xff1a;https://github.com/google/protobuf 解压压缩包&#xff1a;unzip protobuf-master.zip 2、进入解压后的文件夹&#xff1a;cd protobuf-master 3、安装所需工具&#xff1a;sudo apt-get install autoconf automake libt…

企业计算机服务器数据库中了360后缀勒索病毒怎么解决,数据恢复

近日&#xff0c;一家中型企业的服务器数据库遭到了一起严重的网络安全事件&#xff0c;导致企业的运营暂时陷入混乱。据了解&#xff0c;该企业的技术人员在服务器数据库中发现了一种名为“360后缀”勒索病毒&#xff0c;该勒索病毒通过对企业重要文件进行加密&#xff0c;数据…

node.js 爬虫图片下载

主程序文件 app.js 运行主程序前需要先安装使用到的模块&#xff1a; npm install superagent --save axios要安装指定版,安装最新版会报错&#xff1a;npm install axios0.19.2 --save const {default: axios} require(axios); const fs require(fs); const superagent r…

[每日习题]位运算——二进制插入 求最大连续bit数——牛客习题

hello&#xff0c;大家好这里是bang___bang_,今天记录2道关于位运算的牛客习题&#xff0c;二进制插入和求最大连续bit数&#xff0c;题目简单不难。 目录 1️⃣二进制插入 2️⃣求最大连续bit数 1️⃣二进制插入 二进制插入__牛客网 (nowcoder.com) 描述&#xff1a; 给定…

umi 创建的项目中,如何配置多个环境变量

创建env.js 在config.js中配置 在页面中使用 env.js和config.js的目录顺序 package.json中的配置

CountDownLatch和CyclicBarrier学习

CountDownLatch和CyclicBarrier都有一个计数器 CountDownLatch countDownLatch new CountDownLatch(4); CyclicBarrier cyclicBarrier new CyclicBarrier(4) CountDownLatch 是在 countDownLatch.countDown()执行后 4-1 等到4减到0后&#xff0c;就可以继续执行程序&#x…

QT控件通过qss设置子控件的对齐方式、大小自适应等

一些复杂控件&#xff0c;是有子控件的&#xff0c;每个子控件&#xff0c;都可以通过qss的双冒号选择器来选中&#xff0c;进行独特的样式定义。很多控件都有子控件&#xff0c;太多了&#xff0c;后面单独写一篇文章来介绍各个控件的子控件。这里就随便来几个例子 例如下拉列…

【AI换脸】roop在Kaggle上的使用样例

【AI换脸】roop在Kaggle上的使用样例 roop-kaggle前言换脸效果样例 GIF项目描述 roop-kaggle 【AI换脸】roop在Kaggle上的使用样例只需一张脸的图片&#xff0c;即可完成视频内的换脸点我进入Kaggle Notebook样例 前言 因为roop项目的Python环境依赖等问题的处理对于部分朋友…

环境监测系统网关,让景区变成智能化

景区环境监测系统采用先进的物联网网关&#xff0c;实现对各监测单元数据的采集、存储、传输和管理&#xff0c;主要对景点的气象要素、空气质量、水文变化、地质信息、雷电危害等进行监测&#xff0c;是一个集气象预警、在线监控等多种功能于一体的现代化综合系统。 系统介绍…

基于vue+uniapp微信小程序公司企业后勤服务(设备)系统

本系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;查看公司公告&#xff0c;查看设备&#xff0c;设备入库&#xff0c;查看通讯录&#xff0c;会议室预约&#xff0c;申请出入&#xff0c;申请请假等功能。管理员可以对员工信息&#xff0c;会…

【Linux】Centos的一些快捷操作

Centos的一些快捷操作 一个窗口多个终端GVIM 一个窗口多个文件 一个窗口多个终端 GVIM 一个窗口多个文件

2023十大最牛编程语言排行榜以及各语言的优缺点

文章目录 ⭐️ 2023年7月十大编程语言排行榜⭐️ 十大值得学习编程语言概要&#x1f31f; Python&#x1f31f; C/C&#x1f31f; Java&#x1f31f; C#&#x1f31f; JavaScript&#x1f31f; Swift&#x1f31f; Ruby&#x1f31f; GO&#xff08;Golang&#xff09;&#x1…

FreeRTOS函数的命名规则

在学习FreeRTOS的时候&#xff0c;经常遇到函数名前有“x”或“v"&#xff0c;实际上这代表了函数返回值的类型&#xff1a; &#xff08;参考了FreeRTOS系统中函数名和变量名的含义_vportenablevfp_Tinus Chen的博客-CSDN博客&#xff09;

Redis 命令介绍

文章目录 Redis字符串操作命令哈希操作命令列表操作命令set集合sorted set 有序集合通用命令 在Java中操作Redis&#x1f350; ❤️ &#x1f6a9;4.1 Redis的Java客户端 &#x1f350;4.2 Spring Data Redis使用方式 ✏️环境搭建步骤1). 导入Spring Data Redis的maven坐标2).…