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

第一关

注:

  • 神经网络的起源和应用

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

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

    • 理想激活函数:阶跃函数,将输入映射为“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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全球手游4月战报,《Monopoly GO!》荣耀再续!全球手游畅销榜冠军

易采游戏网5月22日消息,在刚刚过去的四月里,全球移动游戏市场的角逐愈发激烈。根据最新发布的数据,Scopely旗下的经典游戏《Monopoly GO!》再次蝉联全球手游畅销榜首冠军宝座,展现了无与伦比的市场魅力与玩家黏度。 4月Scopely《M…

Docker | 基础指令

环境:centos8 参考: 安装 Docker | Docker 从入门到实践https://vuepress.mirror.docker-practice.com/install/ 安装Docker 卸载旧版本,安装依赖包,添加yum软件源,更新 yum 软件源缓存,安装 docker-ce…

Neural Filters:风景混合器

Ps菜单:滤镜/Neural Filters/创意/风景混合器 Neural Filters/CREATIVE/Landscape Mixer 风景混合器 Landscape Mixer滤镜通过与另一个图像混合或改变诸如时间和季节等属性,神奇地改变景观。 “风景混合器”滤镜利用人工智能和机器学习技术,首…

使用Prometheus + Blackbox-exporter快速监控一个网站性能和SSL过期时间

使用blackbox-exporter快速监控一个网站性能和SSL过期时间 环境介绍什么是blackbox-exporter下载blackbox-exporter安装blackbox-exporter配置Prometheus服务端查看job上线监控面板参考文献 环境介绍 本文实验环境 操作系统:Centos 7.9Prometheus版本:…

局部直方图均衡化去雾算法

目录 1. 引言 2. 算法流程 3. 代码 4. 去雾效果 1. 引言 局部直方图算法是一种基于块的图像去雾方法,它将图像分割为若干个块,并在每个块内计算块的局部直方图。通过对各个块的直方图进行分析和处理,该算法能够更好地适应图像中不同区域的…

软件测评在项目中的作用

软件测评在项目中的作用至关重要,主要体现在以下几个方面: 确保软件质量:软件测评是确保软件质量的关键环节。通过对软件的功能、性能、安全性等方面进行全面测试,可以发现软件中的缺陷、错误或不符合需求的地方,从而…

使用OpenVINO™.CSharp.API.Extensions.PaddleOCR NuGet Package快速实现OCR文本识别

PP-OCR是PaddleOCR自研的实用的超轻量OCR系统,可以实现端到端的图像文本检测。为了在C#平台实现使用OpenVINO™部署PP-OCR模型实现文本识别,让更多开发者快速上手PP-OCR项目,基于此,封装了OpenVINO.CSharp.API.Extensions.PaddleO…

selenium环境安装和web自动化基础

webUI自动化背景 因为web页面经常会变化,所以UI自动化测试的维护成本很高。不如接口的适用面广,所以大部分公司会做接口自动化测试,但是未必会做UI自动化测试; UI自动化测试要做也是覆盖冒烟测试,不会到很高的覆盖率&a…

mysql实战——xtrabackup问题

备份恢复后启动不成功。 我测试了很多遍,最开始我以为备份后的数据文件没有pid造成的,所以一直测试 后来发现上图这样是正常的,mysqld_safe后就出现pid和sock文件 那启动失败的原因我认为是权限的问题,把数据文件目录权限全部设置…

利用kubeadm安装k8s集群 以及跟harbor私有仓库下载镜像

目录 环境准备 master(2C/4G) 192.168.88.3 docker、kubeadm、kubelet、kubectl、flannel node01(2C/2G) 192.168.88.4 docker、kubeadm、kubelet、kubectl、flannel node02(…

DreamerV3阅读笔记

DreamerV3 文章希望解决的一个挑战是用固定的hyperparameter来同时处理不同domain的任务。文章发现,通过结合KL balancing 和free bits可以使得world model learn without tuning(是指上面这件事,即不需要对不同任务改变hyperparameter&#…

六.逼格拉满-Prometheus+Grafana微服务监控告警

前言 微服务架构是一个分布式系统,由多个独立的服务组成,每个服务可能运行在不同的容器、虚拟机或物理机上,那么在生产环境中我们需要随时监控服务的状态,以应对各种突发情况,比如:内存爆满,CP…

通过短信群发平台拓客引流营销的效果好不好?

通过短信群发平台进行营销拓客引流的效果可以是非常显著的,但具体效果会受到多种因素的影响,如目标受众的选择、短信内容的吸引力、发送时间和频率的合理性等。 以下是一些短信群发平台营销拓客引流的优势: 1.广泛覆盖:短…

Linux|ubuntu22.04安装CUDA最新完整教程

文章目录 一、安装前准备工作查看GPU和型号查看GCC版本*下载gcc12 *检查驱动 二、安装CUDA Toolkit*安装驱动 三、安装后的工作必要操作推荐的操作开启守护进程模式删除本地下载安装包 四、验证删除CUDA常见问题及解决方案还需要安装cuDNN吗?nvcc: No such file or …

Java-常见面试题收集(十六)

二十五 RocketMQ 1 消息队列介绍 消息队列,简称 MQ(Message Queue),它其实就指消息中间件,当前业界比较流行的开源消息中间件包括:RabbitMQ、RocketMQ、Kafka。(一个使用队列来通信的组件&…

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

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

【AI如何帮你编写测试用例并输出表格格式】

1、工具:顺便使用一款生成式AI即可,此处用的是ChatGPT,Kimi这两个工具试验。 2、首先要拿到需求文档,根据需求文档向AI发出如下指令(Prompt) “请根据下面这段需求,编写测试用例: …

Spark-键值对RDD数据分区

Spark概述 Spark-RDD概述 在Spark中,键值对RDD数据分区是指将键值对RDD中的数据分布到集群中的不同节点上的过程。 Spark目前支持Hash分区、Range分区和用户自定义分区。Hash分区为当前的默认分区。 分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle后…

【Docker系列】 Docker容器具体信息查询

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…