机器学习的网络们

news/2024/9/19 2:15:02 标签: 机器学习, 网络, 人工智能

机器学习网络

  • 1. 线性神经网络
    • 1.1 线性回归
    • 1.2 softmax 回归
  • 2. 多层感知机
    • 2.1 多层感知机
      • 单分类
        • 此处引入激活函数
      • 多分类
      • 多隐藏层
  • 3. 卷积神经网络
    • 3.1 卷积核
      • 多输入输出通道
        • 多输入
        • 多输出
    • 3.2 池化层
    • 3.3 卷积神经网络(LeNet 1998)
  • 4. 现代神经网络
    • 4.1 深度卷积神经网络(AlexNet 2012)
        • 一些细节
    • 4.2 使用块网络(VGG 2014)
    • 4.3 网络中的网络(NIN)
    • 4.4 GoogleLeNet 2014
      • 后续的变种
    • 排名
    • 4.5 ResNet 残差网络

申明:资料大部分来源于d2l,如有错误还望指正

1. 线性神经网络

1.1 线性回归

线性网络,对应的就是基础的线性函数
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

网络结构大概如下所示,输出的内容则主要是0,1两个数字,
在这里插入图片描述
实现代码

def linreg(X, w, b):  #@save
    """线性回归模型"""
    return torch.matmul(X, w) + b

1.2 softmax 回归

从线性回归到了多分类回归,可以输出多个结果
在这里插入图片描述
表达式
在这里插入图片描述
实现的代码

def softmax(X):
    X_exp = torch.exp(X)
    partition = X_exp.sum(1, keepdim=True)
    return X_exp / partition  # 这里应用了广播机制

2. 多层感知机

单层感知机的不足,不能解决
类似下图这样的两个颜色的点就无法成功拟合出来
在这里插入图片描述

2.1 多层感知机

单分类

在这里插入图片描述

此处引入激活函数

通过激活函数引入非线性的特性,从而更加方便的提升复杂度,拟合曲线

多分类

增加softmax函数从而增加多分类的可能性
在这里插入图片描述

多隐藏层

在这里插入图片描述

3. 卷积神经网络

3.1 卷积核

在处理图片的任务的时候,全连接会带来参数过多的问题,通过卷积的方式去解决。
个人理解:全连接是将二维数据一维化之后,再处理。在维度变化的时候,也去除了很多二维本身带来的关联信息,所以在处理数据时候,还是需要用二维的方式来处理,也就引出了大名鼎鼎的卷积层。
在这里插入图片描述在这里插入图片描述
下面这个图是图像处理中常用的一些卷积矩阵,,这些矩阵可以实现对图像的特征提取
在这里插入图片描述

多输入输出通道

多输入

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

多输出

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
多输出在图生图的时候会有较大的作用

3.2 池化层

基于像素的卷积会对特定的位置敏感,所以需要一个对位置不那么敏感的方法。所以就选出了池化层。

所谓最大池化就是在一个矩阵中去选个最大值,放入下个矩阵中去,它最大的特点是将之前卷积层的矩阵乘法简化成了求最大值,简化了数十倍的计算量
在这里插入图片描述
常见的池化方法有最大池化,和平均池化
在这里插入图片描述

整个神经网络,似乎就是不断的增加复杂度,然后寻找一些降低复杂度的方法。再增加复杂度,再寻找降低复杂度的方法,不断的循环。

3.3 卷积神经网络(LeNet 1998)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
我们对原始模型做了一点小改动,去掉了最后一层的高斯激活。除此之外,这个网络与最初的LeNet-5一致

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

net = nn.Sequential(
    nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),
    nn.AvgPool2d(kernel_size=2, stride=2),
    nn.Flatten(),
    nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),
    nn.Linear(120, 84), nn.Sigmoid(),
    nn.Linear(84, 10))

4. 现代神经网络

4.1 深度卷积神经网络(AlexNet 2012)

在这里插入图片描述

图7.1.2 从LeNet(左)到AlexNet(右)
图7.1.2 从LeNet(左)到AlexNet(右)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

一些细节

1.激活函数 sigmoid 到 ReLu 减缓了梯度消失
2. 隐藏全连接层后增加了丢弃层
3. 数据增强
4. 最大池化层
5. 模型并行:将模型分成多个快,每个GPU计算一部分结果。

第一点的改变,可以类比成模拟信号,降低了放大倍数,减小了削顶失真和削底失真,使得模拟量有了更多的输出,而不是直接输出0,1两个数值。由此可见使用模拟的方式来实现计算,是否能够大大加强计算速度?或者太多的失真值后,可以给个错误信号,从而重新计算。
第二点,增加丢弃层后会有改善,证明有部分网络,负优化了参数。而准确的找到负优化的点,或者拆分模型分别计算,再混合结果,兴许有更好的概率,但会增加计算复杂度。

4.2 使用块网络(VGG 2014)

VGG 将单个的层,封装成了特定的网络块。然后再加几层全连接层输出。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.3 网络中的网络(NIN)

NIN 算是比较特殊的VGG快?
卷积之后加了两个全连接层,
双全连接层在alexnet 中已经验证过,会比价有作用。
在这里插入图片描述
总结:
NIN 快使用卷积层,加两个1*1 卷积层,卷积层添加了非线性
NIN 使用全局平均池化层来代替VGG和AlexNet中的全连接层----不容易过拟合,更少的参数个数

4.4 GoogleLeNet 2014

在2014年的ImageNet竞赛中夺得了冠军,在随后的两年中一直在改进,形成了Inception V2、Inception V3、Inception V4等版本。
在这里插入图片描述

这是单独的一个网络块,使用了多通道去抽取特征,然后将结果合并,也验证了多通道能提升识别准确程度的佐证。
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

后续的变种

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

排名

在这里插入图片描述

4.5 ResNet 残差网络

现在遇到的问题是,增加了更多的网络,反而没有能训练出性能更好的网络,所以引入了残差块的概念
所谓残差块,也许可以理解为反馈电路中的正反馈,通过反馈来实现提升精度。现在负反馈尚未出现,所以也许可以试试负反馈的方式,也许能有意想不到的性能。

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


http://www.niftyadmin.cn/n/5664862.html

相关文章

C语言中__attribute__((aligned(x)))的作用?

__attribute__((aligned(x))) 是一种用于指定变量或数据结构对齐方式的 GCC 扩展。它的作用是强制编译器将指定的变量或数据结构按照给定的字节数 x 对齐。 对齐的意义在于: 性能优化:在某些架构上, 数据必须按特定边界对齐才能高效访问。比…

如何提升用户留存?

1. 用户分层与用户场景 依据业务实际状况,对用户进行分层,并梳理各层用户的场景。以外卖产品为例,不同人群的需求和场景各异。唯有明确用户场景,方能知晓如何留住用户。 用户分层及用户场景找寻可借助营销工具进行专业标签化&a…

Django:解决配置缓存问题

前言 Django的默认缓存是存在内存当中,重启服务缓存就失效了。 文章选择用redis做缓存,需要预先安装redis数据库并启动服务。 安装:pip install django-redis。 代码实现 在项目中的setting.py中配置: # 缓存配置 CACHES …

C语言从头学60——学习头文件math.h(三)

十二、函数 modf() 功能:函数 modf 把一个double数分解成整数部分和小数部分。 使用格式:modf (参1,参2); 参1:待分解的数 参2:指向double类型的指针,用于存放整数部分…

Oracle数据库中的动态SQL(Dynamic SQL)

Oracle数据库中的动态SQL是一种在运行时构建和执行SQL语句的技术。与传统的静态SQL(在编写程序时SQL语句就已经确定)不同,动态SQL允许开发者在程序执行过程中根据不同的条件或用户输入来构建SQL语句。这使得动态SQL在处理复杂查询、存储过程中…

ubuntu64位系统无法运行32位程序的解决办法

在 64 位的 Ubuntu 系统上运行 32 位程序时,如果出现问题,可能是由于缺少 32 位库支持。以下步骤可以帮助你解决这一问题: 1. 启用 32 位架构 首先,确保系统支持 32 位架构。你可以通过以下命令添加 32 位架构支持: …

(二建)二级建造师考试真题及答案

(二建)二级建造师考试真题及答案 11.下列结构图中,用来反映一个建设项目参建单位之间责权关系的是()。 A.项目结构图 B.组织结构图 C.合同结构图 D.流程结构图 答案:C 解析:合同结构图反…

scantf

第十三届蓝桥杯C B组 b题 #include<bits/stdc.h> using namespace std; int res; int m[13] {0,31,28,31,30,31,30,31,31,30,31,30,31, }; bool check(string s) {for(int i0;i2<s.size();i){if(s[i]1s[i1]&&s[i1]1s[i2])return true;}return false; } int m…