人工智能(Educoder)-- 机器学习 -- 神经网络(初级)

news2024/11/15 11:03:03

第一关

注:

  • 神经网络的起源和应用

    • 起源:神经网络最早由心理学家和神经学家开创,目的是模拟生物神经系统对真实世界物体的交互反应。
    • 应用:现代神经网络用于分类(如图像识别、文本分类)和数值预测(如股价预测、天气预测)等任务。
  • 神经元模型

    • 输入和权重:神经元接收来自其他神经元的输入信号,并通过带权重的连接进行传递。
    • 阈值:输入值与神经元的阈值进行比较。
    • 激活函数:比较结果通过激活函数处理以产生输出,激活函数决定了神经元是否激活。
  • 激活函数

    • 理想激活函数:阶跃函数,将输入映射为“0”或“1”,表示神经元的兴奋或抑制。
    • 实际使用的激活函数:Sigmoid函数,因其连续性和可微性而被广泛使用。
  • 感知机

    • 结构:感知机由输入层和输出层组成,输出层是M-P神经元或阈值逻辑单元。
      • M-P神经元模型:这个模型最早源于发表于1943年的一篇开创性论文。论文的两位作者分别是神经生理学家沃伦·麦克洛克(Warren McCulloch)和数学家沃尔特·皮茨(Walter Pitts),论文首次实现了用一个简单电路(即感知机)来模拟大脑神经元的行为。 
    • 功能:感知机是一种简单的神经网络模型,由输入层和输出层组成。输入层接收信号,输出层进行处理。感知机可以执行基本的逻辑运算,如与、或、非。
    • 感知机学习规则:当预测错误时,会根据错误程度调整权重,学习率η控制调整幅度。

      • 权重调整:根据输出误差调整权重,学习率为η(0到1之间的值)。
      • 预测正确:如果预测正确,则权重不发生变化。
      • 预测错误:如果预测错误,则根据错误程度调整权重。
    • 感知机的局限性:在于它只能解决线性可分问题,即只能通过一条直线或超平面来区分数据。对于更复杂的问题,需要使用包含隐层的多层前馈神经网络,这些网络能够处理非线性问题。
  • 多层神经网络(简单来说,感知机是神经网络的基础,但能力有限,多层神经网络能解决更复杂的问题。)

    • 隐层:输入层和输出层之间的层,可以解决非线性可分问题。
    • 多层前馈神经网络:每层神经元与下层神经元全互连,没有同层或跨层连接。
  • 神经网络的结构

    • 层级结构:由输入层、隐层(可能多个)和输出层组成。
    • 信号处理:输入层接收信号,隐层和输出层对信号进行加工处理。

Code:

# 导入库
import torch
import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 5x5 square convolution
        # kernel
        self.conv1 = nn.Conv2d(1, 6, 5)  #定义conv1函数的是图像卷积函数:输入为图像(1个频道,即灰度图),输出为 6张特征图, 卷积核为5x5正方形
        self.conv2 = nn.Conv2d(6, 16, 5) #定义conv2函数的是图像卷积函数:输入为6张特征图,输出为16张特征图, 卷积核为5x5正方形
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16*5*5, 120) #定义fc1(fullconnect)全连接函数1为线性函数:y = Wx + b,并将16*5*5个节点连接到120个节点上。
        
        # 任务1:根据网络结构图,定义网络最后两层
        ########## Begin ##########
        self.fc2 = nn.Linear(120, 84) #定义fc2(fullconnect)全连接函数2为线性函数:y = Wx + b,并将120个节点连接到84个节点上。
        self.fc3 = nn.Linear(84, 10)  #定义fc3(fullconnect)全连接函数3为线性函数:y = Wx + b,并将84个节点连接到10个节点上。
        ##########  End  ##########

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # If the size is a square, you can specify with a single number
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features

# 创建网络对象
net = Net()

# 打印网络结构
print(net)

卷积是一种数学运算,它在多个领域中都有应用,包括信号处理、图像处理和机器学习中的卷积神经网络(CNNs)。卷积的基本思想是将一个较小的函数(称为卷积核或滤波器)滑动遍历另一个函数(可以是信号、图像或数据集),在每个位置计算卷积核与函数的局部区域的乘积之和。

以下是卷积的一些关键点:

  • 图像处理中的卷积:在图像处理中,卷积可以用来应用各种效果,如模糊、锐化或边缘检测。通过将一个小的矩阵(卷积核)滑动遍历图像的每个像素,并计算加权和,可以改变图像的局部特征。
  • 卷积核:是一个小的矩阵,它在卷积过程中用于提取输入数据的特征。在CNNs中,卷积核的参数(权重和偏置)通过训练过程学习得到。
  • 卷积神经网络(CNNs):在深度学习中,CNNs利用卷积层来自动和有效地提取图像特征。卷积层通过学习到的卷积核来提取输入图像的局部特征,这些特征随后被用于分类或其他任务。
    • 卷积层(Convolutional Layer)

      • 卷积层是CNN中用于提取图像特征的关键部分。
      • 它使用卷积核(或滤波器)在输入图像上滑动,计算卷积核与图像的局部区域的点积,生成特征图(feature maps)。
    • 池化层(Pooling Layer)

      • 池化层用于降低特征图的空间尺寸,从而减少参数数量和计算量。
      • 最常见的池化操作是最大池化(max pooling),它在一定区域内取最大值。
    • 激活函数

      • 在卷积层和池化层之后通常会跟一个激活函数,如ReLU(Rectified Linear Unit:f(x)=max(0,x))。
      • 激活函数引入非线性,使得网络能够学习和模拟更加复杂的函数映射。
    • 全连接层(Fully Connected Layer)

      • 在多个卷积和池化层之后,CNN通常会有全连接层。
      • 全连接层将卷积层提取的特征进行整合,用于最终的分类或其他任务。
    • 权重共享(Weight Sharing)

      • 卷积核的参数在整个输入图像上是共享的,这意味着无论卷积核在图像的哪个位置,都使用相同的权重。
    • 偏差项(Bias)

      • 卷积层和全连接层通常会有偏差项,用于控制激活的阈值。
    • 步长(Stride)

      • 步长定义了卷积核在输入图像上滑动的距离。
    • 填充(Padding)

      • 填充是在输入图像的边缘添加的零值或特定值,用于控制输出特征图的大小。
  • 卷积操作:卷积操作涉及两个函数:输入函数(如图像或信号)和卷积核。卷积核与输入函数的局部区域进行卷积,产生输出函数。这个过程通常涉及翻转卷积核,然后将其与输入函数的局部区域对齐,计算点积。
  • 多维卷积:除了一维信号处理,卷积也可以扩展到多维,如二维卷积用于图像处理,三维卷积用于视频或体积数据。

卷积是一种强大的工具,它在许多领域中都有广泛的应用,特别是在处理和分析具有空间或时间结构的数据时。 

Conv2d:https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d

Linear: Pytorch nn.Linear的基本用法与原理详解 - 知乎 (zhihu.com)

Maxpool2d: torch.nn.MaxPool2d详解-CSDN博客

View: PyTorch中的view()函数用法示例及其参数详解_.view(-1)-CSDN博客

这段代码定义了一个简单的卷积神经网络(CNN)模型,用于图像识别或其他相关任务。

# 导入PyTorch库和相关的模块
import torch
import torch.nn as nn
import torch.nn.functional as F
  • 导入了PyTorch框架,torch.nn模块包含构建神经网络所需的类,torch.nn.functional模块包含一些函数式的接口,用于实现激活函数、池化等操作。
  • PyTorch 是由 Facebook 开发,基于 Torch 开发,从并不常用的 Lua 语言转为 Python 语言开发的深度学习框架,Torch 是 TensorFlow 开源前非常出名的一个深度学习框架,而 PyTorch 在开源后由于其使用简单,动态计算图的特性得到非常多的关注,并且成为了 TensorFlow 的 最大竞争对手。
class Net(nn.Module):
  • 定义了一个名为Net的类,它继承自nn.Module,是构建任何神经网络的基类。
    def __init__(self):
        super(Net, self).__init__()
  •  定义了Net类的构造函数,super(Net, self).__init__()调用基类的构造函数。
        self.conv1 = nn.Conv2d(1, 6, 5)  #定义conv1函数的是图像卷积函数:输入为图像(1个频道,即灰度图),输出为 6张特征图, 卷积核为5x5正方形
        self.conv2 = nn.Conv2d(6, 16, 5) #定义conv2函数的是图像卷积函数:输入为6张特征图,输出为16张特征图, 卷积核为5x5正方形
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16*5*5, 120) #定义fc1(fullconnect)全连接函数1为线性函数:y = Wx + b,并将16*5*5个节点连接到120个节点上。
        self.fc2 = nn.Linear(120, 84) #定义fc2(fullconnect)全连接函数2为线性函数:y = Wx + b,并将120个节点连接到84个节点上。
        self.fc3 = nn.Linear(84, 10)  #定义fc3(fullconnect)全连接函数3为线性函数:y = Wx + b,并将84个节点连接到10个节点上。
  •  定义了第一个卷积层conv1,它将1个输入通道的图像转换为6个特征图,卷积核大小为5x5。
  • 定义了第二个卷积层conv2,它将前一层的6个特征图转换为16个特征图,卷积核大小同样为5x5。     
  • 定义了一个全连接层fc1,它将来自第二个卷积层的输出(假设是16个特征图,每个特征图大小为5x5)展平后,连接到120个节点。   
  • 定义了第二个全连接层fc2,它将fc1的输出120个节点连接到84个节点。        
  • 定义了第三个全连接层fc3,它将fc2的输出84个节点连接到10个节点,通常这10个节点对应于分类任务中的10个类别。
    def forward(self, x):
  • 定义了forward函数,它是神经网络的前向传播函数,用于计算输入数据x通过网络后的输出。
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
  • 对第一个卷积层的输出应用ReLU激活函数,然后进行2x2的最大池化。
  • 对第二个卷积层的输出应用ReLU激活函数,然后进行2x2的最大池化。
        x = x.view(1, self.num_flat_features(x))
  •  将池化层的输出展平为一维向量,以便输入到全连接层。
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
  • 对fc1全连接层的输出应用ReLU激活函数。
  • 对fc2全连接层的输出应用ReLU激活函数。
        x = self.fc3(x)
  • 通过最后一个全连接层fc3,得到最终的输出。
        return x
  •  返回网络的输出。
        def num_flat_features(self, x):
  • 定义了一个辅助函数num_flat_features,用于计算输入x在全连接层之前需要展平的特征数。
  • 确定全连接层的输入维度:全连接层的每个神经元都需要与前一层的所有激活值相连接。因此,必须知道前一层输出的激活值总数,以便设置全连接层的输入维度。

  • 数据展平:在卷积神经网络中,卷积层和池化层的输出通常是二维或三维的张量(例如,二维特征图)。但在进入全连接层之前,这些多维张量需要被展平成一维向量,以匹配全连接层的输入要求。

  • 计算特征总数num_flat_features 函数通过计算特征图的尺寸(不包括批处理维度)来确定展平后的特征总数。对于每个特征图,计算其宽度、高度和通道数的乘积,得到该特征图展平后的特征数。

  • 动态计算:由于卷积层和池化层可能会改变特征图的尺寸(例如,通过步长或填充),num_flat_features 函数提供了一种动态计算特征总数的方法,而不需要硬编码。

  • 在代码的 forward 方法中,x.view(-1,

 size = x.size()[1:]  # all dimensions except the batch dimension
  •  获取输入x的大小,除了批量维度外的所有维度。
        num_features = 1
        for s in size:
            num_features *= s
        return num_features
  • 计算需要展平的总特征数,返回这个数值。
  • 在这段代码中,num_flat_features 函数的作用是计算经过卷积和池化操作后的二维特征图(feature map)展平(flatten)成一维向量后的特征总数。这个函数在全连接层(fully connected layer,也称为稠密层)之前是必需的,因为全连接层需要知道输入数据的维度。
net = Net()
print(net)
  • 创建Net类的实例,即创建了神经网络对象。
  • 打印神经网络对象的结构,这将显示网络的每一层及其参数。

第二关

任务描述

本关任务:了解前馈神经网络与反馈神经网络的区别,认识一种典型的反馈神经网络,完成右侧窗口内的单项选择题。

相关知识

前馈网络与反馈网络

前馈网络一般指前馈神经网络或前馈型神经网络。它是一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层,数据正想流动,输出仅由当前的输入和网络权值决定,各层间没有反馈。包括:单层感知器,线性神经网络,BP神经网络、RBF神经网络等。

反馈网络,又称自联想记忆网络,输出不仅与当前输入和网络权值有关,还和网络之前输入有关。其目的是为了设计一个网络,储存一组平衡点,使得当给网络一组初始值时,网络通过自行运行而最终收敛到这个设计的平衡点上。包括 Hopfield、Elman、CG、BSB、CHNN 和 DHNN 等。反馈网络具有很强的联想记忆和优化计算能力,最重要研究是反馈网络的稳定性。

主要区别:

  • 前馈神经网络各层神经元之间无连接,神经元只接受上层传来的数据,处理后传入下一层,数据正向流动;反馈神经网络层间神经元有连接,数据可以在同层间流动或反馈至前层。
  • 前馈神经网络不考虑输出与输入在时间上的滞后效应只表达输出与输入的映射关系;反馈神经网络考虑输出与输入之间在时间上的延迟,需要动态方程来描述系统的模型。
  • 前馈神经网络的学习主要采用误差修止法(如BP算法),计算过程一般比较慢,收敛速度也比较慢;反馈神经网络主要采用Hebb学习规则,一般情况下计算的收敛速度很快。
  • 相比前馈神经网络,反馈神经网络更适合应用在联想记忆和优化计算等领域。
Hopfield 神经网络

Hopfield 是一种全连接型的神经网络,模拟生物神经网络的记忆机理。离散型 Hopfield 网络结构比较简单,在实际工程中应用广泛。 Hopfield 是一种单层反馈型非线性网络,每一个结点的输出均反馈到其他结点的输入,整个网络不存在自反馈。Hopfield 利用模拟电路实现了对网络结点的描述。

,

离散型 Hopfield 神经网络:Hopfield 最早提出的网络是二值神经网络,各神经元的激励函数为阶跃函数或双极值函数,神经元的输入、输出只取 {0,1} 或者 { -1,1} ,所以也称为离散型 Hopfield 神经网络 DHNN。在DHNN中,所采用的神经元是二值神经元;因此,所输出的离散值 1 和 0 或者 1 和 -1 分别表示神经元处于激活状态和抑制状态。

离散 Hopfield 神经网络 DHNN 是一个单层网络,有 n 个神经元节点,每个神经元的输出均接到其它神经元的输入。各节点没有自反馈。每个节点都可处于一种可能的状态(1 或 -1),即当该神经元所受的刺激超过其阀值时,神经元就处于一种状态(比如 1),否则神经元就始终处于另一状态(比如 -1)。

测试说明

完成右侧窗口内的单项选择题,平台会对你的结果进行测试。

开始你的任务吧,祝你成功!

Answer

1、C

2、A

3、D

4、D

5、D

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

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

相关文章

docker启动clickhouse

docker启动clickhouse 创建clickhouse目录拉取镜像启动临时容器, 生成配置文件正式启动 clickhouse越来越流行,本地想安装个测试环境 创建clickhouse目录 后续作为挂载卷使用 mkdir -p /home/gugu/ckdata/data mkdir -p /home/gugu/ckdata/conf mkdir -p /home/gu…

信捷XD系列PLC通讯失败程序无法下载如何设置

如题:最近在使用信捷PLC,有时会出现通讯不上的问题,下面将通讯配置步骤及注意事项分享。 一、确保PLC通电,电脑使用USB通讯线和PLC连接。 二、打开程序,点击串口标识,会弹出通信配置窗口。 三、双击USB通讯这条进行设…

【Python小案例】Python+mysql+PyQt5健康体检报告查询

下载安装Python3.7.8 python官网:https://www.python.org/ PyQt5配置 安装PyQt5 pip install PyQt5pip install qt5_toolspytcharm创建项目 配置外部工具 QTDesigner的Arguments语句不用填 QTDesigner的Working directory语句:$ProjectFileDir$ Pyuic的Argume…

【GDAL】GDAL库学习(C#版本)

1.GDAL 2.VS2022配置GDAL环境(C#) VS2022工具–NuGet包管理器–管理解决方案的NuGet程序包,直接安装GDAL包。 并且直接用应用到当前的控制台程序中。 找一张tiff格式的图片,或者用格式转换网站:https://www.zamzar.c…

go升级后 编译的exe在win7上无法正常运行

D:/Go/src/runtime/sys_windows_amd64.s:65 x75 fpx22fca sp-0x22fc8日 升级到go 1.21后报一堆错误,要死了啊 原来是go 1.21不支持win7了,必须把go退回到1.20版本 谷歌发布编程语言 Go 1.21 版本:取消支持微软 Win7/8 及苹果 macOS 10.13/10…

爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集

背景/引言 在大数据时代,网络爬虫技术已经成为数据收集的重要手段之一。爬虫技术可以自动化地从互联网上收集数据,节省大量人力和时间成本。然而,当使用需要身份验证的代理服务器时,许多现有的爬虫框架并不直接支持代理认证。这就…

[力扣]——231.2的幂

题目描述: 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2x ,则认为 n 是 2 的幂次方。 bool isPowerOfTwo(int n){ if(n0)retur…

vue3结合element-plus之如何优雅的使用表格

背景 表格组件的使用在后台管理系统中是非常常见的,但是如果每次使用表格我们都去一次一次地从 element-plus 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…

深度学习之基于YOLOV5的口罩检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着全球公共卫生事件的频发,口罩成为了人们日常生活中不可或缺的一部分。在公共场所&am…

slam14讲(第8讲、前端里程计)LK光流、直接法

直接法的引出 因为第7讲大部分都是讲特征点法,通过提取orb特征点和点的描述子,来构建两帧图像之间的特征点对应关系。这种方法会有缺点: 关键点和描述子提取计算耗时,如果相机的频率高,则slam算法大部分耗时被占。特…

轻量SEO分析报告程序网站已开心去授权

轻量SEO分析报告程序网站已开心去授权,可以让你生成有洞察力的、 简洁的、易于理解的SEO报告,帮助你的网页排名和表现更好 网站源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/

算法学习:快速排序

🔥 个人主页:空白诗 文章目录 🚀 引言📌 快速排序算法核心思想1. 选择基准值(Pivot)2. 分区操作(Partitioning)3. 递归排序子序列 📌 JavaScript 实现1. 快速排序主函数2…

OGG几何内核-BRepBuilderAPI_MakeEdge学习

OGG几何内核fork自OCCT 7.7.0, BRepBuilderAPI_MakeEdge是几何内核的一个重要和基础的功能,也十分复杂,因为要支持line、circle、ellipse,parabola,hyperbola,circle,beziercurve,b…

Web前端开发技术-格式化文本 Web页面初步设计

目录 Web页面初步设计 标题字标记 基本语法: 语法说明: 添加空格与特殊符号 基本语法: 语法说明: 特殊字符对应的代码: 代码解释: 格式化文本标记 文本修饰标记 计算机输出标记 字体font标记 基本语法: 属…

《TortoiseSVN》简单使用说明

##################工作记录#################### 常用图标说明 一个新检出的工作副本 修改过的文件 更新过程遇到冲突的文件 你当前对文件进行了锁定,不要忘记不使用后要解锁,否则别人无法使用 当前文件夹下的某些文件或文件夹已经被调度从版本控制…

BUUCTF靶场 [reverse]easyre、reverse1、reverse2

工具: DIE:下载:https://download.csdn.net/download/m0_73981089/89334360 IDA:下载:https://hex-rays.com/ida-free/ 新手小白勇闯逆向区!!! [reverse]easyre 首先查壳&#xf…

一刷后日谈

后日谈 1.前言 ​ 今天是一刷结束的日子,回顾一路走过来的路,还是得对自己说声谢谢的; ​ 我是一个向来都很抗拒编程的人,那繁琐的符号让我觉得很是头疼,本科期间数据结构与算法都重修了三次,最后临近毕…

Redis --学习笔记

Redis简介 一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件 特点: 基于内存存储,读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 Redis默认端口号为6379 Redis是用…

Shell之(正则表达式)

目录 一、正则表达式的概括 常用选项 基础正则表达式 查看以xxx为开头 查看以xxx为结尾的文件内容 匹配单个或多个字符 匹配中括号里的内容 对子表达式进行多次或者限定次数的匹配 拓展正则表达式的基本用法 扩展元字符 匹配前面的字符或表达式至少1次&#xff0…

分布式微服务之springboot学习[上]

文章目录 SpringBoot基本介绍官方文档springboot是什么?springboot快速入门需求/图解说明完成步骤快速入门小结 Spring SpringMVC SpringBoot的关系梳理关系如何理解 -约定优于配置 依赖管理和自动配置依赖管理什么是依赖管理修改自动仲裁/默认版本号 starter场景启动器starte…