人工智能(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 Fclass Net(nn.Module):def __init__(self):super(Net, self).__init__()# 1 input image channel, 6 output channels, 5x5 square convolution# kernelself.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 + bself.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) windowx = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))# If the size is a square, you can specify with a single numberx = 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 xdef num_flat_features(self, x):size = x.size()[1:]  # all dimensions except the batch dimensionnum_features = 1for s in size:num_features *= sreturn 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 + bself.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 = 1for s in size:num_features *= sreturn 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.mzph.cn/pingmian/14040.shtml

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

相关文章

Windows下安装部署rocketmq

1.1.下载安装rocketmq 下载 | RocketMQ 下载完后解压到自定义目录,MQ解压路径\rocketmq-all-4.6.0-bin-release;(Windows10系统解压路径不要出现空格) 1.2.配置环境变量 配置环境变量,变量名:ROCKETM…

深入探索C/C++内存管理

目录 C/C内存分布 C语言中动态内存管理方式 calloc realloc free C中动态内存管理方式 new和delete操作内置类型 new和delete操作自定义类型 operator new和operator delete函数 new和delete的实现原理 内置类型 自定义类型 定位new和表达式(placement-new) 常见面试…

C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

机器学习之词袋模型

目录 1 词袋模型基本概念 2 词袋模型的表示方法 2.1 三大方法 1 独热表示法(One-Hot) 2 词频表示法(Term Frequency, TF) 3 词频-逆文档频率表示法(TF-IDF) 2.2 例子 1 词袋模型基本概念 词袋模型&a…

《Effective Objective-C 2.0》读书笔记——熟悉Objective-C

目录 第一章:熟悉Objective-C第1条:了解Objective-C语言的起源第2条:在类的头文件中尽量少引入其他头文件第3条:多用字面量语法,少用与之等价的方法第4条:多用类型常量,少用#define预处理指令第…

社交网络安全:保护用户数据的Facebook实践

在数字化时代,社交网络安全成为了人们关注的焦点之一。作为全球最大的社交平台之一,Facebook一直在致力于保护用户数据安全和隐私。本文将探讨Facebook在社交网络安全方面的实践,以及它所采取的措施来保护用户数据的安全性。 1. 数据加密与隐…

AC/DC电源模块:适用于各种功率需求的电子设备

BOSHIDA AC/DC电源模块:适用于各种功率需求的电子设备 AC/DC电源模块是一种广泛应用于不同电子设备中的电源转换模块。它具有输出稳定、高效率、可靠性强等特点,适用于各种功率需求的电子设备。在本文中,我们将探讨AC/DC电源模块的工作原理…

亚信安慧AntDB数据库采集技术创新:ACC从Java到Go的转型之路

传统的指标采集方法通常使用一些命令行工具,如top、free等来获取系统的性能数据。然而,这种方法存在一些缺点。首先,这些命令行工具输出的数据格式通常是文本形式,需要进行解析和处理才能得到有用的信息,这增加了开发者…

计算机网络-BGP概述

一、概述 到目前为止我们已经学习了静态路由、OSPF、RIP、IS-IS了,前面我们也了解到按照区域或者范围来分,路由协议可以划分为:IGP内部网关协议、EGP外部网关协议,而我们前面学习的动态路由都属于IGP的范畴. IGP是用于单一自治系统…

科技赋能,拓宽生活边界

在当今多元化与快速变化的社会中,社会适应能力成为了衡量个人能否顺利融入社会、享受生活品质的关键指标。对于盲人朋友而言,这一能力尤为重要,它不仅关乎日常生活的便利,更影响到心理的健康与社会参与度。在此背景下,…

el-upload上传图片,视频可获取视频时长。

对element-ui组件的upload组件再一次封装&#xff0c;简单记录。下面是效果图。 注意点&#xff1a;该组件现在仅支持单图和单个视频上传。 <template><div :style"myStyle"><divclass"uploads":style"{width: upWith px,height: up…

代码随想录算法训练营第36期DAY36

贪心好难&#xff0c;希望能坚持到柳暗花明那天。 DAY36 1005K次取反后最大化的数组和 自己的方法&#xff0c;注意越界条件放在最前面就好&#xff1a; class Solution {public: int largestSumAfterKNegations(vector<int>& nums, int k) { //自己的…

vue中数据已经改变了,但是table里面内容没更新渲染!

解决方案&#xff1a; 给table或者el-table标签上添加一个动态key值&#xff0c;只要数据发生改变&#xff0c;key值变动一下即可 标签上&#xff1a; :key“timeStamp” 初始data&#xff1a;timeStamp:0, 更新数据&#xff1a;this.timeStamp 这样每次更新数据&#xff…

ChannelHandler和ChannelPipeline之一

目录 ChannelHandler Channel的生命周期 ChannelHandler的生命周期 ChannelInboundHandler接口 ChannelOutboundHandler接口 ChannelHandler适配器 资源管理 ChannelPipeline接口 修改ChannelPipeline 触发事件 ChannelHandler Channel的生命周期 Channel定义了一组和…

整理前期PS问题

前面问题汇总 一、字体显示 字体不显示主要有三个原因&#xff0c;其实在这里面我已经打了“国风”两字&#xff0c; 字体太大&#xff0c;输入框小 只需要把输入框拉大/改变字体 经过字体修改还没有&#xff0c;那就是字体颜色和背景一致 二、字体横竖排变换 将文字打好…

java中的Map集合

一、Map集合概述 1、Map集合以键值对的形式存储元素&#xff0c;是将键映射到值的对象 2、要求&#xff1a; &#xff08;1&#xff09;一个键最多映射一个值 &#xff08;2&#xff09;键不能重复&#xff0c;值可以重复 二、HashMap类 1、是Map接口的实现类 2、特点&a…

Webpack源码泄露到Vue快速入门

前言 1.webpack 源码泄露 1.1漏洞简介 1.2存在泄露的站点 1.3 如何判断是否存在漏洞 方法1: 方法2: 1.4.如何将js.map文件还原为项目文件 1. 4.1查看npm版本 1.4.2 安装reverse-sourcemap 1. 4.3.检查是否安装 ​1. 4.4 使用reverse-sourcemap进行js.map文件还原操作…

深入解读HTTP状态码:分类、含义、应用场景与故障排查指南

HTTP状态码作为超文本传输协议(HTTP)响应的重要组成部分,为客户端与服务器之间的交互提供了清晰的状态反馈。本文将全面展开对HTTP状态码的深入解读,涵盖其分类、具体含义、典型应用场景以及在故障排查中的实用价值,旨在帮助开发者与运维人员更好地理解和应对各类HTTP响应…

Postman使用技巧

Postman是一款广泛使用的API开发和测试工具&#xff0c;专为简化Web服务API的开发、测试、文档编制和协作过程而设计。它支持各种HTTP请求方法&#xff0c;包括GET、POST、PUT、DELETE等&#xff0c;允许用户轻松地构建和发送请求&#xff0c;以及检查响应。 本文介绍几个提升效…