(深度学习快速入门)第三章第一节:多层感知器简介

news2024/12/23 8:51:42

文章目录

  • 一:引入
  • 二:定义
  • 三:反向传播算法
  • 四:构建多层感知器完成波士顿房价预测

一:引入

前文所讲到的波士顿房价预测案例中,涉及到的仅仅是一个非常简单的神经网络,它只含有输入层和输出层
在这里插入图片描述

但观察最终结果,我们发现仅含有单个输出层的神经网络其预测效果并不是很好,甚至有些结果预测得都不合理

  • 这是因为:简单的神经网络或简单的线性运算是存在很大问题的,任何特征的(微小)变化都可能导致模型最终输出发生巨大变化

那如何解决这个问题呢?我们的想法就是在输入层和输出层之间加入单个或多个隐藏层,并且这些隐藏层上的神经元并非像之前那样只做简单的线性运算,而是线性运算后再经过一个激活函数的作用,这样一来整个模型就具有了更好的非线性表达能力了。隐藏层有了,该如何连接呢?最简单的想法就是进行全连接,也即每一层神经元都接受上一层所有神经元的输入,然后输出给下一层的所有神经元,我们将这种结构称之为多层感知器(MLP)(又叫做人工神经网络)。如下图是一个仅包含单个隐藏层的MLP模型

在这里插入图片描述

当然假如多个隐藏层时,这个神经网络的规模就很庞大了,此时称这种网络结构为全连接神经网络(DNN),在Pytorch中对应torch.nn.Linear

在这里插入图片描述

二:定义

多层感知器:多层感知器包含一个或多个在输入节点和输出节点之间的隐藏层,除了输入节点外,每个节点都是使用非线性激活函数的神经元。而在不同层之间,多层感知器具有全连接性,即任意层中的每个神经元都与它前一层中的所有神经元或者节点相连接,连接的强度由网络中的权重系数决定。多层感知器是一类前馈人工神经网络。网络中每一层神经元的输出都指向输出方向,也就是向前馈送到下一层,直到获得整个网络的输出为止

三:反向传播算法

  • “反向传播算法”过程及公式推导(超直观好懂的Backpropagation)

反向传播算法:多层感知器训练依托于反向传播算法,反向传播算法通过求解损失函数关于每个权重系数的偏导数(梯度),依次使误差最小化来训练整个网络

在这里插入图片描述

如下图
在这里插入图片描述

四:构建多层感知器完成波士顿房价预测

这里我们引入隐藏层构建一个简单的MLP来完成前文的波士顿房价预测

# 导包
import numpy as np
import torch
from sklearn.datasets import load_boston
import warnings
warnings.filterwarnings("ignore")

# 数据部分
# 读入数据
data = load_boston()
X = data.data
y = data.target

# 拆分数据
X_training = X[0:496, ]
y_training= y[0:496, ]
X_testing = X[496:, ]
y_testing= y[496:, ]

# 网路结构:这里加入一个隐藏层
class BostonPredictNet(torch.nn.Module):
    def __init__(self, n_feature, n_output):
            super(BostonPredictNet, self).__init__()
            self.hidden = torch.nn.Linear(n_feature, 100) # 隐藏层
            self.predict = torch.nn.Linear(100, n_output)
    def forward(self, x):
        out = self.hidden(x)
        out = torch.relu(out)  # 激活函数ReLU
        out = self.predict(out)
        return out

net = BostonPredictNet(13, 1) # 输入为13,输出为1
    
# 损失函数
loss_func = torch.nn.MSELoss()

# 优化器
optimizer = torch.optim.SGD(net.parameters(), lr=0.0001)

# 训练
for i in range(1, 10000):
    
    ###################### 训练 ###############################
    
    # 前向运算
    x_data = torch.tensor(X_training, dtype=torch.float32)
    y_data = torch.tensor(y_training, dtype=torch.float32)    
    pred = net.forward(x_data)
    pred = torch.squeeze(pred)  # 降维
    # 注意损失可能过大会导致无法显示所以可以先减小,但是注意最后要复原
    loss_train = loss_func(pred, y_data) * 0.01 # 计算损失

    
    # 反向传播(三步走)
    optimizer.zero_grad() # 初始化梯度为0,也即把损失函数关于权重系数的导数置为0
    loss_train.backward() # 计算梯度
    optimizer.step() # 梯度下降,更新参数
    print("-"*30)
    print("第{}次迭代".format(i))
    print("训练集loss为{}:".format(loss_train))
    print("(训练集)预测值:", pred[0:10])
    print("(训练集)真实值:", y_data[0:10])
    
    ###################### 测试 ###############################
    x_data = torch.tensor(X_testing, dtype=torch.float32)
    y_data = torch.tensor(y_testing, dtype=torch.float32)    
    pred = net.forward(x_data)
    pred = torch.squeeze(pred)
    loss_test = loss_func(pred, y_data) * 0.001 
    
    print("测试集loss为{}:".format(loss_test))
    print("(测试集)预测值:", pred)
    print("(测试集)真实值:", y_data)

可以看到,对比之前的结果,预测效果有所提升

之前
在这里插入图片描述
之后

在这里插入图片描述

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

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

相关文章

vue3 antd项目实战——Form表单的重置与清空【resetFields重置表单未生效(手写重置函数)】

vue3 antd项目实战——resetFields重置表单无效【手写重置函数重置表单数据】关于form表单的文章合集场景复现原因分析解决方案(手写清空函数)关于form表单的文章合集 文章内容文章链接Form表单提交和校验https://blog.csdn.net/XSL_HR/article/details/128495087?spm1001.20…

面向对象定义一个hero类

问题定义一个hero类,属性有power,name,分别代表体力值和英雄的名字,体力值默认为100;方法有:1.行走的方法如果体力值为0,则输出不能行走,此英雌已死亡的信息;2.吃的方法&…

双非二本、已获HCIA认证的大二学生与C站相遇的2022

目录 前言 2022年1月、2月——迷茫 2022年3月~6月——调整规划 ​2022年7月——在CSDN发布第一篇博客 2022年8月——步入正轨,获得2022谷歌开发者大会入场名额 2022年9月~10月——开学季,收获季 2022年11月——第一次接触项目并去公司学习实践&…

01通信/协议一些简要概念

通信的目的 将一个设备的数据传送到另一个设备,扩展硬件系统。 通信协议 制定通信的规则,通信双方按照协议规则进行数据收发。 每一种通讯协议都有硬件与软件上的要求。 常见的协议 USART TX、RX 全双工 异步 单端 点对点 I2C SCL、SDA 半双…

百度大规模知识图谱构建及技术应用实践

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点罗振宇2023年跨年演讲PPT原稿2023年,如何科学制定年度规划?《底层逻辑》高清配图‍基于深度学习的个性化推荐系统实时化改造与…

【Node.js实战】一文带你开发博客项目之登录(对接完毕,cookie、session、redis各司其职)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…

【蓝桥杯选拔赛真题54】Scratch小猫钓鱼 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch小猫钓鱼 一、题目要求 编程实现 二、案例分析 1、角色分析

河道船只识别系统 yolov5

河道船只识别系统通过Python基于YOLOv5深度学习框架模型技术对画面中船只进行监测,如识别到有船只违规行为,立即抓拍告警同步回传给平台。YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其速度…

写了个自动巡检多个接口地址的脚本!

作者:JackTian 来源:公众号「杰哥的IT之旅」 ID:Jake_Internet 转载请联系授权(微信ID:Hc220088) 原文链接:写了个自动巡检多个接口地址的脚本! 没错,这次我结合工作运用…

【C语言】你对动态内存分配有多少了解呢

🏖️作者:malloc不出对象 ⛺专栏:《初识C语言》 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、什么是动态内存分配二、为什…

SpringBoot(二)【学习笔记】

SpringBoot的配置文件 之前SSM项目: 每一个框架都有自己的配置文件, 每一个配置文件头文件不一样, 需要找到每个框架的头文件 SpringBoot的配置文件: 所有的框架的配置项,都可以在application.properties文件配置, 如果自定义一些配置, 修改SpringBoot默认的配置项, 可以在appl…

JAVA语言程序设计基础入门技术教程

JAVA语言程序设计基础 第一章:JAVA入门基础–开山篇 视频:https://edu.csdn.net/course/detail/8034 前言:什么是java 是咖啡飘香的清晨是斯坦福校园意浓情深是James的思想睿智是剁手党双十一挥舞的利刃是大数据服务的平台是春运时节那期…

Java高手速成│实战:应用数据库和GUI开发产品销售管理软件(1)

实战项目:应用数据库和GUI开发产品销售管理软件 01、项目分析 应用各种数据库编程技术,并利用GUI组件,例如按钮、标签、文本字段提供增添、更新、删除产品销售记录等功能。利用JTable显示产品销售数据表中的记录。图1显示了这个实战项目的典…

【目标检测】FPN网络全解

目录:FPN网络详解一、引言二、论文概述2.1 图像金字塔2.2 为什么需要构造特征金字塔三、论文详解四、FPN框架解析五、为什么FPN能够很好的处理小目标?六、FPN总结一、引言 这篇论文是CVPR2017年的文章,采用特征金字塔做目标检测,…

让程序“说话”pyttsx3模块

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 让程序“说话” pyttsx3模块 选择题 关于下列代码说法错误的是? import pyttsx3 enginepyttsx3.init() engine.setProperty(rate,180) engine.say(我喜欢学习python数据分析&#x…

统信软件根社区斩获CSDN两项大奖

在CSDN 2022中国开发者影响力盛典中,统信软件根社区凭借多年的深耕与投入以及社区影响力,荣获CSDN 2022年度开发者社区;旗下社区发行版deepin荣获CSDN 2022年度开源影响力项目。 CSDN颁奖现场 “CSDN 2022 中国开发者影响力年度评选”自 20…

温故知新:从计算机体系结构看操作系统

知识诅咒(Curse of Knowledge),是指我们掌握了某知识,就很难体会没有它的感觉,不理解获得知识以前的状态及还未获得该知识的人,从而产生沟通障碍。计算机体系结构正在消亡 (Architecture is dying)&#xf…

一篇用 AI 生成的跨年感怀

一言难尽的2022终于过去了虽然跨年,只是我们的星球围绕我们的恒星环行一周的时间标记,并不真的代表什么。但我们就是希望多事而沉重的一年能快点滚蛋,新的生活能开门重启。我用 Midjourney 生成了很多跨年场景的图。prompt 很简单&#xff0c…

2003-2021年飞机航线数据

1、时间为:2003-2021年 2、指标包括: 起点城市、起点城市所属地级市、起点城市所属省份、起点机场、终点城市、终点城市所属地级市、终点城市所属省份、终点机场、 航空公司、航班、机型、出发时间、到达时间、准点率、班次_周一、班次_周二、班次_周…

RabbitMQ路由模式

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉Linux专栏 🔥欢迎大佬指正,一起学习!一起加油! 目录&…