深度学习_14_单层|多层感知机及代码实现

news2024/11/24 7:56:32

单层感知机:

在这里插入图片描述
功能:

能完成二分类问题

问题:

模型训练采用X*W + b训练出模型,对数据只进行了一层处理,也就是说训练出来的模型仅是个线性模型,它无法解决XOR问题,所以模型在训练效果上,识别的正确率会低一些

在这里插入图片描述
在这里插入图片描述
单层感知机是线性的,没办法用一条线分开上述两种类型

实现:

import torch
from torch import nn
from d2l import torch as d2l

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

num_inputs, num_outputs, num_hiddens = 784, 10, 256

W1 = nn.Parameter(torch.randn(
    num_inputs, num_outputs, requires_grad=True) * 0.01)
b1 = nn.Parameter(torch.zeros(num_outputs, requires_grad=True))

params = [W1, b1]


def net(X):
    X = X.reshape((-1, num_inputs))
    H = X@W1 + b1  # 这里“@”代表矩阵乘法
    return H # (H@W2 + b2)

loss = nn.CrossEntropyLoss() # 多类别分类问题的损失函数

num_epochs, lr = 10, 0.1
updater = torch.optim.SGD(params, lr=lr)

if __name__ == '__main__':
    num_epochs = 10
    cnt = 1
    for i in range(num_epochs):
        X, Y = d2l.train_epoch_ch3(net, train_iter, loss, updater)
        print("训练次数: " + str(cnt))
        cnt += 1
        print("训练损失: {:.4f}".format(X)) #训练损失是用训练数据集测得
        print("训练精度: {:.4f}".format(d2l.evaluate_accuracy(net, test_iter))) # 训练精度是用测试数据集测得
        print(".................................")

效果:

在这里插入图片描述

可以看出线性模型的识别损失和正确率还有待提升

多层感知机:

功能:

能利用隐藏层,实现非线性模型

在这里插入图片描述
主要利用激活函数,将上一层输出,转入下一层输入,以完成模型的去线性

在这里插入图片描述
在这里插入图片描述
激活函数必须用非线性,否则最后模型W1 * W2仍是一个线性模型

常用的激活函数:

在这里插入图片描述

激活函数不用做指数函数,所以会很快

实现:

import torch
from torch import nn
from d2l import torch as d2l

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) # 获取训练集,检测集

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)

def net(X):
    X = X.reshape((-1, num_inputs)) # 将28 * 28图片拉成一维度784
    H = relu(X @ W1 + b1)
    return (H @ W2 + b2)

loss = nn.CrossEntropyLoss()
num_ecophs, lr = 10, 0.1
updater = torch.optim.SGD(params, lr = lr)

if __name__ == '__main__':
    num_epochs = 10
    cnt = 1
    for i in range(num_epochs):
        X, Y = d2l.train_epoch_ch3(net, train_iter, loss, updater)
        print("训练次数: " + str(cnt))
        cnt += 1
        print("训练损失: {:.4f}".format(X)) #训练损失是用训练数据集测得
        print("训练精度: {:.4f}".format(d2l.evaluate_accuracy(net, test_iter))) # 训练精度是用测试数据集测得
        print(".................................")


效果:

在这里插入图片描述
可以看出训练效果有略微提升

总结:

多层感知机,突破了单层感知机用线性模型去识别事物的瓶颈

为什么非线性模型要比非线性模型好:

非线性模型相对于线性模型的优势主要在于其更强大的表达能力和适应性:

能够处理更复杂的关系:
非线性模型能够表示更复杂的特征和模式,因为它们具有更灵活的函数形式。在现实世界的数据中,很多问题并不是简单的线性关系,而是包含了各种复杂的非线性关系。非线性模型可以更好地拟合这些非线性数据,并提供更准确的预测能力。

更好地适应复杂任务:
在面对复杂任务时,非线性模型能够更好地捕捉数据中的高阶特征和交互作用。例如,图像识别、语音识别、自然语言处理等领域常常需要处理复杂的数据结构,而这些数据结构往往包含了大量的非线性信息。非线性模型能够更好地理解这些数据并进行有效的建模。

更好地处理特征的组合效应:
非线性模型能够捕获特征之间的复杂组合效应。线性模型只能表示特征的线性组合,而非线性模型可以处理特征之间的乘积、平方、高次幂等非线性组合,从而更全面地考虑特征之间的关系。

虽然非线性模型在很多情况下具有更强大的建模能力,但也需要注意过拟合的问题。过于复杂的模型可能会在训练数据上表现得很好,但在未见过的数据上泛化能力可能较差。因此,在选择模型时需要平衡模型的复杂度和泛化能力。

多层感知机与softmax回归的区别:

softmax回归本质上对模型的线性输出进行了处理,将其转换成正太概率分布形式,便于交叉函数的预测,本质上其模型仍是线性模型

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

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

相关文章

cookie机制 + java 案例

目录 为什么会有cookie?? cookie从哪里来的?? cookie到哪里去?? cookie有啥用?? session HttpServletRequest类中的相关方法 简单的实现cookie登录功能 实现登录页面 实现servlet逻辑 实现生成主…

【Spring】依赖注入方式,DI的方式

这里写目录标题 1. setter注入在一个类中注入引用类型在一个类中注入简单类型 2. 构造器注入在一个类中注入引用类型在一个类中注入简单类型 3. 依赖注入方式选择4. 依赖自动装配按类型注入按名称注入 5. 集合注入 1. setter注入 在一个类中注入引用类型 回顾一下之前setter注…

Python基础:输入输出详解-输出字符串格式化

Python中的输入和输出是编程中非常重要的方面。 1. 输入输出简单介绍 1.1 输入方式 Python中的输入可以通过input()函数从键盘键入,也可以通过命令行参数或读取文件的方式获得数据来源。 1)input()示例 基本的input()函数,会将用户在终端&…

力扣栈与队列--总结篇

前言 八道题,没想到用了五天。当然需要时间的沉淀,但是一天不能啥也不干啊! 内容 首先得熟悉特点和基本操作。 栈与队列在计算机底层中非常重要,这就是为什么要学好数据结构。 可视化的软件例如APP、网站之类的,都…

Kotlin原理+协程基本使用

协程概念 协程是Coroutine的中文简称,co表示协同、协作,routine表示程序。协程可以理解为多个互相协作的程序。协程是轻量级的线程,它的轻量体现在启动和切换,协程的启动不需要申请额外的堆栈空间;协程的切换发生在用…

AVL树的底层实现

文章目录 什么是AVL树?平衡因子Node节点插入新节点插入较高左子树的左侧新节点插入较高左子树的右侧新节点插入较高右子树的左侧新节点插入较高右子树的右侧 验证是否为平衡树二叉树的高度AVL的性能 什么是AVL树? AVL树又称平衡二叉搜索树,相…

腾讯云服务器便宜吗?腾讯云服务器怎么买便宜?附优惠链接

首先,咱们来看一下大家最关心的一个问题:“腾讯云服务器便宜吗?”我的答案是:“YES!它真的很便宜!”比如,轻量2核2G3M服务器,1年只需要88元,是不是很划算?再比…

实例解释遇到前端报错时如何排查问题

前端页面报错: 1、页面报错500,首先我们可以知道是服务端的问题,需要去看下服务端的报错信息: 2、首先我们查看下前端是否给后端传了id: 我们可以看到接口是把ID返回了,就需要再看下p_id是什么情况了。 3、我们再次请…

基于ssm+vue的程序设计课程可视化教学系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

双11背后的中国云厂商:新“标准化”,和调整后的新韧性

降价并不代表一味的压缩自身利润空间,云厂商已经开始向具有更高利润空间的PaaS、SaaS产品腾挪,核心产品在总包占比越来越高。 作者|斗斗 编辑|皮爷 出品|产业家 今年云厂商,全面拥抱双11。 作为中国最大的云计算服务提供商&#xff0…

关于苏州立讯公司国产替代案例(使用我公司H82409S网络变压器和E1152E01A-YG网口连接器产品)

关于苏州立讯公司国产替代案例(使用我们公司的H82409S网络变压器和E1152E01A-YG网口连接器产品) 苏州立讯公司是一家专注于通信设备制造的企业,他们在其产品中选择了我们公司的H82409S网络变压器和E1152E01A-YG网口连接器,以实现…

在线协作工具都有哪些?推荐这10款

如今,互联网的快速发展不仅改变了我们的生活方式,也改变了我们的工作方式。 特别是对于一些与产品设计相关的公司或团体,网络不仅为其设计提供了稳定的资源和灵感,而且为成员之间的沟通和合作提供了更大的便利。 如果您也需要为…

ke11介绍本地,会话存储

代码顺序: 1.设置input,捕获input如果有多个用属性选择符例如 input[typefile]点击事件.向我们的本地存储设置键值对 2.在点击事件外面设置本地存储表示初始化的值.点击上面的事件才能修改我们想修改的值 会话(session)浏览a数据可以写到本地硬盘,关闭页面数据就没了 本地(…

JPA整合Sqlite解决Dialect报错问题, 最新版Hibernate6

前言 我个人项目中,不想使用太重的数据库,而内嵌数据库中SQLite又是最受欢迎的, 因此决定采用这个数据库。 可是JPA并不支持Sqlite,这篇文章就是记录如何解决这个问题的。 原因 JPA屏蔽了底层的各个数据库差异, 但是…

使用Python的time库来格式化时间

目录 一、引言 二、time库简介 三、使用time库来格式化时间 四、使用time库进行时间戳转换 五、使用time库获取当前时间 六、使用time库进行延时操作 七、使用time库计算时间差 八、使用time库获取系统时间 九、使用time库的其他功能 总结 一、引言 在Python中&…

鸿蒙OS应用开发初体验

什么是HarmonyOS? HarmonyOS(鸿蒙操作系统)是华为公司开发的一款基于微内核的分布式操作系统。它是一个面向物联网(IoT)时代的全场景操作系统,旨在为各种类型的设备提供统一的操作系统平台和开发框架。Har…

自媒体剪辑必备,6个音效素材网站,你值得拥有。

这6个剪辑必备的音效素材网站一定要收藏好了,有了这几个网站能让你在剪辑的时候事半功倍,还不用担心版权问题。话不多说,直接上干货。 1、菜鸟图库 https://www.sucai999.com/audio.html?vNTYwNDUx 菜鸟图库是一个综合性素材网站&#xff…

ref属性

Vue 中 可以给标签(HTML元素标签、组件标签)加上一个 ref 属性,作用就是给 标签加上一个标识,可以通过该标识获取当前需要的DOM元素或者组件实例对象。 通过原生js获取DOM 如果使用原生js来获取DOM元素时,我们最简单的…

Kafka学习笔记(一)

目录 第1章 Kafka概述1.1 消息队列(Message Queue)1.1.1 传统消息队列的应用场景1.1.2 消息队列的两种模式 1.2 定义 第2章 Kafka快速入门2.1 安装部署2.1.1 集群规划2.1.2 jar包下载2.1.3 集群部署 2.2 Kafka命令行操作 第3章 Kafka架构深入3.1 Kafka工…

23111708[含文档+PPT+源码等]计算机毕业设计基于javaweb的旅游网站前台与后台旅景点

文章目录 **论文截图:****实现:****代码片段:** 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 下面是系统运行起来后的部分截图: 论文截图: 实现: 代码片段&#xf…