神经网络通俗理解学习笔记(1)

news/2024/9/17 9:19:00/ 标签: 笔记, 深度学习

神经网络通俗理解学习笔记(1)

    • 神经网络原理
    • 激活函数
    • 前向传播和反向传播
    • 多层感知机代码实现
      • 加载数据
      • 网络结构
      • 损失函数
      • 优化器
      • 训练
      • 测试
      • 保存
    • 回归问题
      • 一元线性回归
      • 多元线性回归
      • 多项式回归
    • 线性回归代码实现
      • 数据生成
      • 设置超参数
      • 初始化参数
      • 可视化
      • Pytorch模型实现
    • 分类问题
      • 数学表示
      • 损失函数
    • 多分类问题代码实现
      • 加载MINIST数据集
      • 数据加载器
      • 构建网络
      • 损失函数和优化器
      • 模型评估
      • 模型训练

神经网络原理

在这里插入图片描述
在这里插入图片描述
汇聚n个线性变换,最后做一个非线性变换。
在这里插入图片描述

神经网络本质上是很多个线性模型的模块化组合
输入层是样本本身,维度就是样本维度
输出层是样本类别标签
隐藏层是最重要的神经元,并不是层数越多维度越大泛化能力越好,会出现过拟合问题。

隐藏层层数和维度多了容易过拟合,少了模型比较弱,隐藏层层数和维度2个指标需要综合考量,都是重要的超参数。

激活函数

用于非线性变换,必须是可导的

为什么引入非线性?
在这里插入图片描述

线性组合无法表示复杂的非线性数据。
神经网络模型的本质其实是如何用线性模型去解决非线性问题。

怎么引入非线性?
通过激活函数。(就可以对空间进行扭曲变换)
线性空间的非线性,在高维非线性空间却线性可分。
在这里插入图片描述
在这里插入图片描述
sigmoid函数
输出值压缩到(0,1),常用于二分类问题,其他一般不用,容易导致梯度消失问题
在这里插入图片描述

Tanh函数
是sigmoid函数的改进版,输出值压缩到(-1,1),输出以0为中心,更快的收敛速度,适用于多分类,输入值较大的时候也容易导致梯度消失

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

Relu函数
多数情况下的第一选择,解决梯度消失问题,计算速度快,但当输入为负数时某些权重无法更新。

在这里插入图片描述
softmax函数
输入值映射到概率分布上
主要用在多分类问题
使得输出具有可解释性

在这里插入图片描述
激活函数用于给线性的矩阵运算非线性化
softmax作用是将输出转化为概率值,相当于归一化
损失衡量当前模型的好坏
反向传播是优化调整参数(权重w、截距b)

不同网路模型区别体现在:
网络模型结构、损失函数、动态求解损失函数过程、对问题(过拟合等)的解决方式

前向传播和反向传播

损失函数
在这里插入图片描述

在这里插入图片描述
均方误差

前向传播(本质传递数据和信息):
不断往前传计算损失
深度前馈网络
前馈神经网络

反向传播(本质传递误差、梯度/偏导数):
通过训练参数(w和b)使损失函数的值越来越小
损失倒查分解(偏导数的链式法则)
计算每层参数梯度

目的是找到这些参数的偏导数,然后以此为依据更新模型参数。

多层感知机代码实现

举初级阶段便于理解的神经网络代码实现的例子。

加载数据

在这里插入图片描述
先加载数据
在这里插入图片描述
由于直接全部拿去训练内存吃不消,所以批量进行训练,训练集需要设置shuffle为true,消除顺序影响,提升泛化能力。

网络结构

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

在这里插入图片描述

损失函数

根据分类问题或是回归问题确定
在这里插入图片描述
这里是分类问题,所以用交叉熵损失函数

优化器

在这里插入图片描述
优化器Adam

训练

在这里插入图片描述
在这里插入图片描述
在图片任务中,一般采用小批量策略读取数据和训练
外层循环表示训练10次,里面的循环表示从dataloader中循环读取数据,每次读取batchsize大小的批数据
在这里插入图片描述

测试

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

保存

在这里插入图片描述

回归问题

一元线性回归

在这里插入图片描述

在这里插入图片描述
用于对数据进行预测
找最优的拟合直线 转化为 最优化问题,反复迭代参数使得目标函数值最小

多元线性回归

X 变成矩阵的形式
在这里插入图片描述
在这里插入图片描述

多项式回归

在这里插入图片描述
把非线性问题转化为线性问题去求解

在这里插入图片描述
这个X可能是高维的

线性回归代码实现

本质上是一个神经元的神经网络

数据生成

在这里插入图片描述

tensor是张量的意思,一种多维数组,在机器学习领域,tensor通常用来表示训练数据、模型参数、输入数据等。
维度可以是一维、二维、n维
pytorch中的基本数据结构,具备良好的计算性能,可以使得GPU加速,大大提高计算效率。

设置超参数

在这里插入图片描述
学习率和最大迭代次数

初始化参数

用pytorch的randn函数初始化参数w
用zeros函数初始化参数b
randn函数会生成均值为0标准差为1的随机张量
zeros函数会生成全部元素都为0的张量

在这里插入图片描述
grad参数设为true 表示在反向传播时计算梯度

初始化方法:
1、常数 zeors
2、随机数 randn
3、预训练好的参数
具体使用哪种视问题而定

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

可视化

在这里插入图片描述

Pytorch模型实现

设置超参数以及前面的生成数据一样
在这里插入图片描述
在这里插入图片描述
为什么要清空梯度?

  • 避免梯度累加:在神经网络训练过程中,每次迭代都会计算梯度。如果不清空梯度,那么在下一次迭代时,新的梯度会与之前的梯度累加。这会导致梯度值非常大,从而使得模型参数更新过大,影响模型的收敛。
  • 确保每次迭代独立:清空梯度可以确保每次迭代都是独立的,每次更新模型参数都是基于当前批次的损失函数计算出的梯度,而不是之前批次的累积梯度。
  • 防止梯度爆炸:在某些情况下,如果梯度没有被清空,梯度可能会随着迭代次数的增加而指数级增长,导致所谓的梯度爆炸问题,这会使得模型参数更新变得不稳定。

分类问题

输出是离散的类别标签,而不是连续的值

在这里插入图片描述

把一个问题用数学模型表示,然后找到目标函数,用优化求解办法获得模型参数

数学表示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
softmax可以使所有类别的概率和等于1
可以将输入的特征值转化为概率值,方便决策
神经网络中一般用概率这种表示

损失函数

在这里插入图片描述
均方误差适合衡量回归预测结果与真实值的差距,但不能很好衡量分类结果与真实值之前的差距

在这里插入图片描述
在二分类中,当y为1时 后面项为0;当y为0时,前面项为0

对数运算的好处:

  • 单调性质
  • 结合性质 将多个乘转化为和的形式
  • 缩放性 可以把一个大数范围进行压缩

在这里插入图片描述
m样本数,n类别数, Yij 表示样本i的类别标号是j,p(Xij)表示预测的样本i属于类别j的概率
二分类问题上本质上和对数损失函数等价
多分类表示上略有区别,更适合神经网络模型

通常二分类用对数损失函数,多分类用交叉熵损失函数

多分类问题代码实现

在二分类中 可以用sigmoid函数
在多分类中 通常用softmax函数
在这里插入图片描述

神经网络的最后一层称为softmax层,这一层的输出是概率分布,表示输入数据属于每个类别的概率,为了计算这个概率,我们使用softmax函数

在训练神经网络时,通常使用交叉熵损失函数度量预测值和真实值的差距,对于多分类问题,交叉熵损失函数可以计算为
在这里插入图片描述
y是预测值,p是预测值
通过最小化交叉熵损失函数,可以训练模型参数。训练完之后,可以使用他进行多分类,为了做出预测,需要将输入数据输入到神经网络中,并根据输出的概率分布决定它属于哪个类别

使用softmax函数和交叉熵损失函数是一种多分类的常见方法。

加载MINIST数据集

在这里插入图片描述
可以使用torchvision中的数据加载器轻松访问这个数据集

数据加载器

pytorch中加载和预处理数据的工具
可以将数据分成若干批,每次送入一个批次的数据到神经网络中,可以减少内存的使用,使得训练更快

在这里插入图片描述
cmap显示灰度图

构建网络

在这里插入图片描述
定义模型
定义一个线性层
在这里插入图片描述
实例化模型

损失函数和优化器

在这里插入图片描述

模型评估

在这里插入图片描述
model.eval 设置模型为评估模式不会更新权重
torch.no_gard 上下文管理器 适用于不需要求梯度的情况

x.view(-1,input_size) -1 是pytorch中特殊符号表示这个数据维度由数据其他维度决定
实际上是将数据拉伸成一个二维矩阵,每一行对应一个样本,每一列对应特征
使输入数据的形状满足模型的要求

模型训练

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


http://www.ppmy.cn/news/1524248.html

相关文章

22_图论中的高级数据结构

菜鸟:老鸟,我最近在处理一个网络节点数据的问题,发现代码运行得特别慢。你能帮我看看有什么优化的方法吗? 老鸟:当然可以。你处理的是图结构对吗?你是如何存储和操作这些节点的? 菜鸟&#xf…

LTE PSS搜索阶段频偏估计MATLAB实现

上期讲到PSS阶段频偏估计,包括整数倍频偏估计和小数倍频偏估计,但是未用MATLAB给大家实现,本期用MATLAB实现: function [freq_offet,N_ID_2,frameHead] = PSS_det(rxSig_init,params) % % % % coding time 2024.09.11 pssThr = 25; N = 128; root_set = [25 29 34]; …

服务器数据恢复—OneFS文件系统下数据被删除的数据恢复案例

服务器数据恢复环境&故障: EMC NAS(Isilon S200),共3个节点,每个节点配置12块STAT硬盘。数据分两部分:一部分数据为vmware虚拟机(WEB服务器),通过NFS协议共享到ESX主…

Origin画图——误差棒的制作

1.示例数据如下,x轴数据可以是自己的溶液浓度,不同模型等,y轴数据由自己的具体数据而定。 2.选中三列数据,选择统计,描述统计,行统计,选择输出量,标准差与均值。 3.输出数据如下。…

什么是嵌入式?行业前景如何?

目录 什么是嵌入式? 主要特点 常见应用场景 1. 工业自动化 2. 交通运输 3. 智能家居 4. 消费电子 5. 医疗设备 6. 航空航天 7. 物联网(IoT) 8. 能源管理 行业前景如何? 市场需求强劲 物联网(IoT)的爆发 汽车…

数据集火焰检测 >> DataBall

数据集 火焰检测 目标检测 深度学习 人工智能 ---------------------------------------------------------- 火焰检测数据集:2000 样本

每天一道面试题(4):Spring Boot 的“约定优于配置”理解

Spring Boot 的“约定优于配置”理解 普通人的回答 在 Spring Boot 中,"约定优于配置"的理念可以减少大量的配置工作,让开发者专注于业务代码的编写。这意味着 Spring Boot 默认提供了许多开箱即用的配置和功能,使得我们不需要手…

为虚拟机配置固定的IP地址(CentOS9)

配置虚拟网卡 首先关闭虚拟机 打开虚拟网络编辑器 选择更改配置 选择VMnet8,选择子网的IP和掩码 (这里的子网掩码为255.255.255.0,表示前24位为网络号,后8位为主机号)然后点击DHCP设置 设置开始IP地址和结束IP地址&…

论文120:Giga-SSL: Self-supervised learning for gigapixel images (2023, CVPR, 开源)

文章目录 1 要点2 方法2.1 算法设计2.2 设计选择 1 要点 题目:用于千兆像素图像的自监督学习 (Giga-SSL: Self-Supervised Learning for Gigapixel Images) 代码:https://github.com/trislaz/gigassl 研究目的: 现有的WSI分类方法依赖于有…

win10任务栏透明如何调整?——详解Windows任务栏设置与优化技巧

在这个数字化时代,电脑已经成为我们日常办公和生活中的。关于win10任务栏透明的设置方法,身边很多同事都在咨询。 本文就来简单介绍下关于电脑任务栏个性化设置的方法,毕竟任务栏影响着用户体验。这时,一款优秀的任务栏优化工具就…

DBA实战手记,技术书的黑神话

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、 高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

线性方程组求解——预处理Preconditioning介绍

为什么需要预处理? 工程中出现的大规模线性方程组往往是病态的, 对数值求解带来很大的困难: ▶ 使得迭代法(比如Krylov 子空间迭代法) 收敛变得非常缓慢 ▶ 对数值解的精度产生很大的影响(在有限精度计算情形下) 对于第一个问题, 当前的有效处理方法是预处理, 预处…

day43(9/4)——k8s

一、前期准备 1、配置主机映射 [rootk8s-master ~]# vim /etc/hosts 192.168.8.168 k8s-master 192.168.8.176 k8s-node1 192.168.8.177 k8s-node2 [rootk8s-master ~]# ping k8s-master 2、配置yum源 [rootk8s-master yum.repos.d]# vim kubernetes.repo [kubernetes…

高职人工智能训练师边缘计算实训室解决方案

一、引言 随着物联网(IoT)、大数据、人工智能(AI)等技术的飞速发展,计算需求日益复杂和多样化。传统的云计算模式虽在一定程度上满足了这些需求,但在处理海量数据、保障实时性与安全性、提升计算效率等方面…

深圳建站公司-如何做网站

深圳建站公司:如何制作一个成功的网站 在信息化快速发展的今天,企业和个人越来越重视网络形象,网站成为了展示品牌、推广产品和服务的重要平台。深圳作为科技创新和经济发展的前沿城市,涌现出许多专业的建站公司,能够为…

CATH标识符解读

在CATH数据库中,标识符如1a0rB00、1a0rP01、1a0rP02代表的是蛋白质结构的具体信息,主要涉及PDB编号、链ID以及结构域。让我们具体解释这些标识符的含义。 CATH标识符的组成 CATH标识符通常由以下几个部分组成: PDB ID:代表蛋白…

基于SpringBoot的家具销售电商平台

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBootMyBatis 工具:IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员功能界面…

MongoDB日志级别

日志 查看当前的日志级别 根据你提供的 MongoDB 命令结果,命令 db.adminCommand({ getParameter: "logComponentVerbosity" }) 返回了 "ok" : 0,这意味着命令执行失败,没有成功获取到日志级别的配置信息。错误信息 &quo…

PHP函数如何传递数组参数

php 函数可以使用数组参数传递大量数据。语法:参数类型前加上方括号 ([])。例如:myfunction(array $arr)。实战案例:计算数组元素平均值。注意:数组参数默认为引用传递,类型提示可提高代码可读性,数组解构可…

vue面试题2*

vue.js的两个核心是什么&#xff1f; 数据驱动、组件系统 v-on可以监听多个方法吗&#xff1f; 可以。 <input type"text" :value"name" v-on{ input:"onInput", focus:"onFocus",blur:"onBlur"} /> v-on 常用修…