多层感知机(神经网络)

目录

  • 一、感知机(逻辑回归、二分类)定义:
  • 二、感知机不能解决XOR问题:
  • 三、多层感知机定义:
  • 四、训练过程:
    • 1.参数维度:
    • 2.常用激活函数:
      • 2.1Sigmoid激活函数:
      • 2.2Tanh激活函数:
      • 2.3ReLU激活函数:
    • 3.训练过程举例:******
  • 五、底层代码实现:
  • 六、Pytorch版代码:

一、感知机(逻辑回归、二分类)定义:

感知机其实就是一个逻辑回归模型,解决的是二分类问题。
逻辑回归模型其实就是加入了激活函数后的线性回归模型,加入激活函数的作用是使得输出层单一神经元的单一输出值限制在0和1之间,更适合于二分类问题。
在这里插入图片描述
感知机的训练过程同线性回归,只不过在线性回归的基础上输出之前加入了激活函数进行映射。

二、感知机不能解决XOR问题:

由于逻辑回归模型只能通过一条直线将样本数据划分为两个分类,因此对于下面的样本,无论如何训练模型,得到的决策边界都不能将样本正确的划分。
在这里插入图片描述
因此对于上述问题,应该如何解决?

答案是将多个逻辑回归模型堆叠多层,就能很好的解决上述问题,这就是多层感知机的由来。
在这里插入图片描述
其中黄色的逻辑回归模型、蓝色的逻辑回归模型将样本分别分为两类。最后通过灰色的逻辑回归模型使用蓝色黄色的输出特征作为输入将样本最终分为两类。

三、多层感知机定义:

多层感知机(神经网络)是逻辑回归和Softmax回归的推广,将逻辑回归和Softmax回归堆叠来解决原来单一模型不能解决的问题。其中隐藏层h1–h5为逻辑回归模型,用于根据输入特征分别解决一个二分类问题,输出层o1–o3组成一个Softmax回归模型,根据隐藏层输出的特征进行三分类问题的预测。

在这里插入图片描述

四、训练过程:

1.参数维度:

在这里插入图片描述

  • 输入层维度固定,由数据决定。
  • 隐藏层神经元个数是个超参数,因此隐藏层参数矩阵W、b的行数固定,由输入层维度决定,但是列数不固定,由神经元个数决定。
  • 输出层参数矩阵W、b的列数固定,由分类数目决定,但是行数不固定,由隐藏层神经元个数决定。

对于多隐藏层情况,每个隐藏层都有各自的W、b参数,其中隐藏层层数也是一个超参数。
在这里插入图片描述
注意每一层都是一个全连接层。全连接层概念

2.常用激活函数:

2.1Sigmoid激活函数:

在这里插入图片描述

2.2Tanh激活函数:

在这里插入图片描述

2.3ReLU激活函数:

在这里插入图片描述

3.训练过程举例:******

以十分类模型的一次训练过程为例,其中隐藏层一层,隐藏层神经元个数为256:
1.获取一个batch,里面包含batch_size张图片。
2.将batch_size张图片展成一维(例如24×24的图片展成784),获得输入维度为:batch_size×784×1(图片数×特征维度[784×1])。
3.隐藏层参数W维度计算为784×256,参数b维度计算为1×256。
4.每张图片的所有特征分别输入隐藏层的各个神经元hi及其激活函数计算预测值yi,一张图片的输出维度为256×1,隐藏层对整个batch的输出维度为batch_size×256×1,作为输出层输入(隐藏层相当于提取特征)。
5.输出层参数W维度计算为256×10,参数b维度计算为1×10。
6.将隐藏层输出特征矩阵作为隐藏层输入,输出层是一个softmax回归模型。
7.接下来的操作同softmax回归,每个1×256×1的特征分别作为输入计算预测值,输出维度1×10的预测结果。
8.整个batch中的输出组合成维度batch_size×10。
9.使用softmax回归将输出映射成概率,维度为batch_size×10,并且每行概率之和为1。
10.使用交叉熵损失函数计算batch中所有图片的概率损失,并取均值。
11.计算各个参数wmn、bn关于损失函数的梯度。
12.反向传播算法修改参数值。
13.输入下一个batch进行训练。

五、底层代码实现:

import torch
from torch import nn
from d2l import torch as d2l
# 1.获取数据,封装成一个dataloader
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)num_inputs, num_outputs, num_hiddens = 784, 10, 256# 实现的多层感知机,其中隐藏层数为1,隐藏层中神经元个数为256
# 2.初始化参数值
# 隐藏层
W1 = nn.Parameter(torch.randn(num_inputs, num_hiddens, requires_grad=True) * 0.01)# num_inputs×num_hiddens
b1 = nn.Parameter(torch.zeros(num_hiddens, requires_grad=True))# 1×num_hiddens
# 输出层
W2 = nn.Parameter(torch.randn(num_hiddens, num_outputs, requires_grad=True) * 0.01)# num_hiddens×num_outputs
b2 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))# 1×num_outputsparams = [W1, b1, W2, b2]# 3.实现激活函数
def relu(X):a = torch.zeros_like(X)return torch.max(X, a)# 4.损失函数
loss = nn.CrossEntropyLoss()# 5.实现模型
def net(X):X = X.reshape((-1, num_inputs))#将输入X拉成二维矩阵,即batch_size×num_inputs(这里把特征拉成一维)H = relu(X @ W1 + b1)# 隐藏层return (H @ W2 + b2)# 输出层# 6.训练过程
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)

六、Pytorch版代码:

import torch
from torch import nn
from d2l import torch as d2l# 1.网络架构
net = nn.Sequential(nn.Flatten(),# 将输入数据展平nn.Linear(784, 256),# 隐藏层为全连接层nn.ReLU(),# 隐藏层输出需经过激活函数nn.Linear(256, 10)# 输出层也是全连接层)
# 2.初始化参数
def init_weights(m):if type(m) == nn.Linear:nn.init.normal_(m.weight, std=0.01)net.apply(init_weights);# 3.训练过程
batch_size, lr, num_epochs = 256, 0.1, 10
loss = nn.CrossEntropyLoss()
trainer = torch.optim.SGD(net.parameters(), lr=lr)train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)

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

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

相关文章

深入分析 Android ContentProvider (三)

文章目录 深入分析 Android ContentProvider (三)ContentProvider 的高级使用和性能优化1. 高级使用场景1.1. 数据分页加载示例:分页加载 1.2. 使用 Loader 实现异步加载示例:使用 CursorLoader 加载数据 1.3. ContentProvider 与权限管理示例&#xff1…

【工具】轻松转换JSON与Markdown表格——自制Obsidian插件

文章目录 一、插件简介二、功能详解三、使用教程四、插件代码五、总结 一、插件简介 JsonMdTableConverter是一款用于Obsidian的插件,它可以帮助用户在JSON格式和Markdown表格之间进行快速转换。这款插件具有以下特点: 轻松识别并转换JSON与Markdown表格…

60个常见的 Linux 指令

1.ssh 登录到计算机主机 ssh -p port usernamehostnameusername: 远程计算机上的用户账户名。 hostname: 远程计算机的 IP 地址或主机名。 -p 选项指定端口号。 2.ls 列出目录内容 ls ls -l # 显示详细列表 ls -a # 显示包括隐藏文件在内的所有内…

【GD32】从零开始学GD32单片机 | 基于SD卡的FatFs文件系统移植(GD32F470ZGT6)

1. 简介 FatFs是一个专门为微处理器设计的通用文件系统,像8051、AVR、PIC、ARM架构的微处理器都能兼容该文件系统。 FatFs文件系统最大的一个优点是它是DOS和Windows兼容的,这意味着你只需要再移植一个USB驱动就可以实现在电脑中访问单片机的储存结构&…

Cookie与Session 实现登录操作

Cookie Cookie 是网络编程中使用最广泛的一项技术,主要用于辨识用户身份。 客户端(浏览器)与网站服务端通讯的过程如下图所示: 从图中看,服务端既要返回 Cookie 给客户端,也要读取客户端提交的 Cookie。所…

Domainim:一款高效的企业级网络安全扫描工具

关于Domainim Domainim是一款功能强大的企业级网络安全扫描工具,该工具运行效率高,功能完善,可以帮助广大研究人员针对企业或组织网络执行大规模安全扫描任务。 该工具可以快速执行网络安全扫描和域名/子域名网络侦查任务,旨在使…

python毕业设计选题协同过滤算法在音乐推荐系统

✌网站介绍:✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围:Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容:免费功能设计、免费提供开题答辩P…

暑期C++ 缺省参数

有任何不懂的问题可以评论区留言,能力范围内都会一一回答 1.缺省参数的概念 缺省参数是是声明或定义参数时为函数的参数指定一个缺省值。在调用该函数值时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参 看了上面定义后&#…

【零基础必看的前端教程】——JavaScript(七)数组

欢迎大家打开前端的新篇章——JavaScript,JavaScript与HTML、CSS合称为前端三大件,JavaScript是前端的重中之重,小洪将继续以零基础视角,带你循序渐进学习前端知识,一看就懂,小白也能转行做前端&#xff01…

vue3实现在新标签中打开指定的网址

有一个文件列表,如下图: 我希望点击查看按钮的时候,能够在新的标签页面打开这个文件的地址进行预览,该如何实现呢? 比如: 实际上要实现这个并不难,参考demo如下: 首先&#x…

渗透测试——利用公网反弹shell到本地的两种方式,vmware虚拟机与主机的端口转发,本地ssh无法上线的问题解决

解决问题: 因长期使用本地模拟靶场,实战护网时并非模拟靶场,shell反弹需要利用公网测试。解决目标站无法反弹到本地的情况。解决本地是windows,虚拟机是kail、linux,无法相互转换流量的情况。 环境搭建 靶机 centOS7 …

VScode 批量操作

VScode 批量操作 批量修改 按住 alt/option 键, 选择需要批量操作的位置 如果是多行,则按住 altshift 键 可以直接操作 但是有时候比如变量命名,可能需要递增操作的命名 需要下载插件 Increment Selection 按照1的方法多选光标之后&am…

html+css+js前端作业 王者荣耀官网5个页面带js

htmlcssjs前端作业 王者荣耀官网5个页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89574989 目录1 目录2 目录3 项目视频 王者荣耀5个页面(带js) 页面1 页面2 页面3 页面4 页面5

php接口返回的json字符串,json_decode()失败,原来是多了红点

问题: 调用某个接口返回的json,json_decode()失败,返回数据为null, echo json_last_error();返回错误码 4 经过多次调试发现:多出来一个红点,预览是看不到的。 解决:要去除BOM头部 $resul…

vue 搜索框

效果 创建搜索组件: 在Vue项目中,首先需要创建一个搜索组件。这个组件通常包含一个输入框和一个搜索按钮。使用v-model指令将输入框与组件的数据属性(如searchKeyword)进行双向绑定,以便获取用户输入的关键词。处理搜索…

Linux网络:传输层协议TCP(二)三次挥手四次握手详解

目录 一、TCP的连接管理机制 1.1三次握手 1.2四次挥手 二、理解 TIME_WAIT 状态 2.1解决TIME_WAIT 状态引起的 bind 失败的方法 三、理解CLOSE_WAIT状态 一、TCP的连接管理机制 在正常情况下, TCP 要经过三次握手建立连接, 四次挥手断开连接 1.1三次握手 三次握手顾名思…

Docker从零开始:安装、部署到卸载,一文搞定全流程

Docker是一种开源容器化平台,它允许开发者将应用程序及其依赖打包成轻量级、可移植的容器。这些容器能确保软件在任何环境中稳定运行,无论是开发者的笔记本电脑还是生产服务器。Docker流行的原因在于其提供的隔离性、可移植性和可扩展性,它简…

2024年展望:人工智能领域将呈现怎样的发展趋势?

2024年,人工智能(AI)领域将继续保持强劲的发展势头,并呈现出多个重要的发展趋势。以下是对该领域未来发展趋势的详细展望: 一、技术创新与融合 多模态生成式AI的崛起: 多模态生成式AI系统能够处理文本、声…

C# 将字符串数组以树型结构化

例如字符串数组: string[] arr { "1","3-4-5-6-7", "2","3-4","3-4-5","3-4-5-6", "3", "6", "4", "6-1", "6-2", "5", "6-1-1&…

李艳波医生怎么挂号?

对于想要预约李艳波医生的患者来说,北京仁爱堂提供了两种便捷的预约方式:来院面诊和视频会诊。来院面诊是传统的就诊方式,患者可以直接前往仁爱堂,与李艳波医生面对面交流,详细了解自己的病情并接受专业的治疗建议。这…