【神经网络和深度学习-开发案例】 第二章 神经网络结构

2023-05-16

【神经网络和深度学习】

第二章 神经网络结构


案例:使用神经网络识别手写数字

我将介绍一个神经网络,它可以很好地对手写的数字进行分类。为了准备这一点,它有助于解释一些术语,让我们可以命名一个网络的不同部分。假设我们有网络:

这里写图片描述

如前所述,这个网络中最左边的层称为输入层,层中的神经元被称为输入神经元。最右边或输出层包含输出神经元,或者,就像在本例中一样,是一个输出神经元。中间层被称为隐藏层,因为这一层的神经元既不是输入,也不是输出。“隐藏”这个词听起来有点神秘——我第一次听到这个词的时候,我认为它一定有一些深刻的哲学或数学意义——但它的意思只不过是“不是输入或输出”。上面的网络只有一个隐藏的层,但是一些网络有多个隐藏层。例如,下面的四层网络有两个隐藏层:

这里写图片描述

这种多层网络又被称为多层感知器或MLPs,它们是由S型神经元组成的,而不是感知器。

在网络中输入和输出层的设计通常是直接的。例如,假设我们试图确定一个手写的图像是否描述了一个“9”。设计网络的一种自然方法是将图像像素的强度编码到输入神经元中。如果图像是64×64分辨率的图像,那么我们就有4,096=64× 64输入神经元,在0和1之间适当地缩放。输出层只包含一个神经元,输出值小于0.50.5,表示“输入图像不是9”,值大于0.50.5,表示“输入图像是9”。

虽然神经网络的输入和输出层的设计通常是直接的,但隐藏层的设计却有相当的复杂。特别地,用一些简单的经验法则来总结隐藏层的设计过程是不可能的。相反,神经网络研究人员已经开发出了许多隐藏层的设计方法,帮助人们从他们的网中获得他们想要的行为。例如,这样的启发式可以用来帮助确定如何在培训网络所需的时间内权衡隐藏层的数量。在这本书中,我们将会遇到一些这样的设计启发法。

到目前为止,我们一直在讨论神经网络,其中一个层的输出被用作下一层的输入。这种网络被称为前馈神经网络。这意味着网络中没有循环——信息总是被灌输的,从来没有反馈过。如果我们有循环,我们就会得到函数的输入取决于输出的情况。这是很难理解的,所以我们不允许这样的循环。

前馈神经网络:Feed forward neural networks (FF or FFNN) and perceptrons(P)
这里写图片描述

然而,还有其他的人工神经网络模型,在这些模型中,反馈回路是可能的。这些模型被称为周期性神经网络。在这些模型中,我们的想法是让神经元在一定的时间内燃烧,然后变得静止。这种放电可以刺激其他神经元,这可能会在一段时间后发生,也会持续很短的时间。这导致更多的神经元被激活,所以随着时间的推移,我们会产生一连串的神经元放电。循环不会在这样的模型中引起问题,因为神经元的输出只会在以后的某个时间影响它的输入,而不是瞬间。

周期性神经网络:Recurrent neural networks(RNN)
这里写图片描述

霍普菲尔网络的每个神经元都与其他神经元相连接;它是一碗完全纠缠在一起的意大利面。每个节点在训练前都是输入点,然后训练中都是隐藏节点,训练结束后又是输出节点。这些网络会设定神经元的值为所需要的模式,然后计算全职,通过这种方法来训练模型。在这之后权重不会再改变。一旦训练成一种或多种模式,网络会一直收敛到一种学习好的模式,因为网络只有在这些状态下才是稳定的。注意到它不会一直符合所要的状态。它能够部分稳定是因为全局的“能量”或“温度”在训练中是逐步减少的。

霍普菲尔网络: Hopfield network(HN)

这里写图片描述

卷积神经网络和大多数其他类型的网络都很不相同。他们最初用来做图像处理,后来也用在其他类型的输入数据比如音频。一个典型的CNN应用是,当你给网络输入图像,网络会对数据进行分类,例如如果你输入的是猫的照片,它会给出标签“猫”。CNN通常以一个输入“扫描仪”开始,而它并不会在理科解析所有的训练数据。举例来说,输入一个200*200像素的图像,你肯定不想要有40000节点的一层。相反,你建立一个扫描输入层比如20*20,把大图像左上角的20*20像素进行扫描。一旦前20*20经过处理,逐像素向右移动这个扫描器来扫描所有的剩余图像。注意到,我们并没有把处理过的20*20像素挪开,也没有把图像分成20*20的小块,而是使用这个20*20的扫描器对所有像素进行扫描。输入数据然后进行卷积层而不是普通曾,意味着不是所有的节点都和其他节点相连接。每个节点都只和她最近的节点相连(远近取决于具体的实现,但通常不会很多)。这些卷积层也倾向于变小当它们越老越深的时候,通常是输入大小最容易整除的因子(如20可能变成10,然后5)。2的幂在这里会经常被使用,因为它们能够很完全的分离:32,16,8,4,2,1。除了这些卷积层,通常还有特征池化层。池化是一种滤出细节部分的方法:最常用的池化技术是极大值池化,比如我们对2*2的像素,返回其R值最大的像素。对音频使用CNN,我们只需要输入音频波,然后一点一点增加长度。实际中对CNN的使用通常在末端增加一个FFNN用来深入处理数据,通常要能处理高度非线性抽象分类问题。CNN+FFNN这种网络通常称为DCNN,但是DCNN和CNN的名称和缩写通常可以互相代替。

卷积神经网络:Convolutional neural networks (CNN or DCNN)

这里写图片描述

我们将集中讨论更广泛使用的前馈网络。

一个简单的网络,用来对手写数字进行分类


在定义了神经网络之后,让我们回到手写识别。我们可以把识别手写数字的问题分成两个子问题。首先,我们想要一种方法,将包含许多数字的图像分解成一系列单独的图像,每个图像都包含一个数字。举个例子,我们修改以下一张图片
这里写图片描述

到6个单独的图片

这里写图片描述

我们人类很容易就能解决这个分割问题,但是对于一个计算机程序来说,正确地分解图像是很有挑战性的。一旦图像被分割,程序就需要对每个数字进行分类。
举个例子,我们希望我们的程序能识别出上面的第一个数字这里写图片描述

我们将专注于编写一个程序来解决第二个问题,即对单个数字进行分类。我们这样做是因为一旦你有了一个很好的分类数字的方法,就会发现分割问题并不是那么难解决。有许多方法可以解决分割问题。一种方法是尝试许多不同的分割图像的方法,使用单个数字分类器来对每个试验分割进行评分。如果单个数字分类器对其在所有段中的分类有信心,那么试片的分数就会很高,如果分类器在一个或多个段中有很多麻烦,则会得到较低的分数。这个想法是,如果分类器在某个地方遇到麻烦,那么它很可能会遇到麻烦,因为分割被错误地选择了。这个想法和其他的变化可以很好地解决分割问题。因此,与其担心市场细分,我们将专注于开发一个神经网络,它可以解决更有趣和更困难的问题,即识别单个手写的数字。
为了识别单个数字,我们将使用一个三层神经网络:

这里写图片描述

网络的输入层包含了编码输入像素值的神经元。
我们的网络训练数据将包括28像素的扫描手写数字,因此输入层包含784=28×28 neurons个神经元。为了简单起见,我省略了上面图表中的大部分784的输入神经元。输入像素是灰度级的,其值为0.0代表白色,值为1.0表示黑色,在表示逐渐变暗的灰色阴影之间。

网络的第二层是一个隐藏的层。我们用n来表示这个隐藏层的神经元数量,我们将对n的不同值进行实验。这个例子展示了一个小的隐藏层,只包含n=15个神经元。
网络的输出层包含10个神经元。如果第一个神经元着火了,也就是说输出是1 ,这就表示网络认为数字是0。如果第二个神经元触发,那就意味着网络认为数字是1,等等。更准确地说,我们从0到9的输出神经元,并找出哪个神经元具有最高的激活值。如果这个神经元是6号神经元,那么我们的网络就会猜测输入的数字是6。对于其他输出神经元也是如此。

你可能想知道为什么我们要使用10个输出神经元。毕竟,网络的目标是告诉我们哪个数字(0,1,2,……,9)对应于输入图像。一种看似自然的方法是使用4个输出神经元,把每个神经元当作一个二进制值来对待,这取决于神经元的输出是否接近于0或1。四个神经元就够了,因为 24=16 2 4 = 16 比输入数字的10个可能值要多。为什么我们的网络应该使用10个神经元呢?这不是效率低下吗?最终的理由是经验性的:我们可以尝试两个网络设计,结果是,对于这个特殊的问题,拥有10个输出神经元的网络比拥有4个输出神经元的网络更能识别数字。但这让我们想知道为什么使用10个输出神经元会更好。是否有一些启发式方法可以提前告诉我们,我们应该使用10-输出编码而不是4-输出编码?

为了理解我们为什么要这样做,它有助于思考神经网络从最初的原理中所做的事情。首先考虑我们使用10个输出神经元的情况。让我们把注意力集中在第一个输出神经元上,这个神经元试图决定这个数字是否为0。它通过从隐藏的神经元层中权衡证据来做到这一点。那些隐藏的神经元在做什么?好吧,假设为了论证,隐藏层中的第一个神经元会检测到一个像下面这样的图像是否存在:

这里写图片描述

它可以通过重加权输入像素来实现这一点,它与图像重叠,并且只对其他输入进行轻微的加权。同样地,让我们假设,隐藏层中的第二、第三和第四神经元检测出下面的图像是否存在:
这里写图片描述

正如你可能已经猜到的,这四张图片组成了我们在前面所示的数字行中所看到的0图像:
这里写图片描述

所以如果所有这些隐藏的神经元都被激活了那么我们就可以得出这个数字是0。当然,这并不是我们可以用来得出结论的唯一证据,即图像是0—我们可以通过许多其他方式得到一个0(例如,通过对上述图像的翻译,或者轻微的扭曲)。但似乎可以肯定地说,至少在这种情况下,我们会得出结论,输入是0。
假设神经网络以这种方式运作,我们可以给出一个合理的解释,为什么从网络中得到10个输出,而不是4个。如果我们有4个输出,那么第一个输出神经元将会试图决定这个数字中最重要的位是什么。而且没有一种简单的方法可以将最重要的部分与简单的形状联系起来,就像上面所展示的那样。很难想象有什么好的历史原因,这个数字的组成部分将与(例如)输出中最重要的部分密切相关。
现在,有了这些,这都是一种启发式。没有什么能说三层神经网络必须像我描述的那样运作,隐藏的神经元检测简单的组件形状。也许一个聪明的学习算法会找到一些权重的分配,让我们只使用4个输出神经元。但作为一种启发,我所描述的思维方式非常有效,并且可以为您节省大量的时间来设计良好的神经网络架构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【神经网络和深度学习-开发案例】 第二章 神经网络结构 的相关文章

  • 黑马程序员C++课程笔记二(模板、STL)

    笔记 C 43 43 模板 STL学习笔记 代码地址 xff1a 程序文件名与课程P一致 文章目录 笔记 C 43 43 模板 STL学习笔记1 模板1 1 模板的概念1 2 函数模板1 2 1 函数模板语法1 2 2 函数模板注意事项1
  • Nano板使用USB与PX4通信

    环境配置 USB micro与PX4通信 文章目录 环境配置 USB micro与PX4通信1 硬件接线2 软件环境 最近项目需要PX4与记载电脑通信 xff0c 查了下资料目前方案有 1 使用TELEM2串口的 xff0c 阿木的就是使用
  • 在Win下Visual Studio配置Eigen

    在Win下Visual Studio配置Eigen 最近在使用Visual Studio时想使用一下著名的矩阵运算库 xff1a Eigen xff0c 摸索了一下如何在Visual Studio中配置 1 下载Eigen源码 直接到Eig
  • AirSim中运行VIO算法(VINS-Mono)

    VINS Mono在AirSim上跑通 文章目录 VINS Mono在AirSim上跑通一 IMU参数配置二 相机参数设置三 AirSim发布数据问题 关于相机 IMU内外参的完整解释 xff0c 可以参考我的另一篇文章 一 IMU参数配置
  • AirSim中获取视觉、惯性数据方法研究

    AirSim中获取视觉 惯性数据方法研究 文章目录 AirSim中获取视觉 惯性数据方法研究1 获取ROS bag格式数据2 获取文件形式 EuRoc数据集格式 3 其他方案 最近在做AirSim中部署V SLAM xff0c 抽空将之前尝
  • 如何引用开源库(BibTex转为endnote)方法

    前言 xff1a 我们在写论文时 xff0c 论文的工作有时可能会用到别人的开源算法库 xff0c 那么我们如何在参考文献中引用呢 以Ceres库为例 xff0c 该库是谷歌开发的一款求解非线性优化问题的库 xff0c 相信做SLAM相关的
  • 关于MAC 安装 laravel4 的一些经验 二

    unix 和windows 完全不同 xff0c 只好恶补了一些UNIX的知识 xff0c 找到了 profie 这个是隐藏文件 xff0c 在find里面找不到的 接下来只能自己配置PHP环境或者下载其他软件 我下载了XAMPP xff0
  • AirSim相机、IMU内外参分析(VIO、vSLAM)

    作者 朱贞欣 xff0c 公ZH xff1a SLAM学习er 文章目录 0 引入1 世界坐标系2 IMU2 1 IMU数据生成2 2 关于IMU噪声 3 相机3 1 相机外参3 2 内参 0 引入 假设你想通过AirSim获取仿真数据运行
  • C++ cout输出小数位数

    方法一 xff1a 使用setiosflags span class token macro property span class token directive hash span span class token directive
  • kubeadm init 运行时kebelet启动失败问题

    最近在部署kebeedge xff0c 需要先在云服上部署k8s xff0c 期间通过kubeadm init config的方式进行master的部署 xff0c 记录一下遇到的kubelet相关的错误 在通过kubeadm init c
  • 2288hv5超融合服务器 数码管报888

    问题现象 2288hv5超融合服务器 xff0c 前面板数码管报888 xff0c 电源灯黄灯闪烁 xff0c 开不了机 xff0c ibmc网络是通的 xff0c 但是web网页打不开 问题原因 iBMC的版本过低 xff0c iBMC在
  • 跟我一起写操作系统(二)——史上最简单的内核

    跟我一起写操作系统 二 史上最简单的内核 转载注明出处 xff1a http www cnblogs com lucasysfeng p 4847662 html 上一讲地址 xff1a http www cnblogs com lucas
  • k8s中文文档

    http www cnblogs com huangzhenyou p 8066145 html k8s概念比较多 xff0c 有什么概念的疑惑的推荐看k8s中文文档 me的环境 操作系统 xff1a centos7 docker xff1
  • 阿里云 CentOS7 安装图形化界面 。安装图形化界面看这一篇就够了。

    阿里云centos7 下执行eclipse 响应学校老师的要求安装eclipse用于与hadoop的操作 在这之前想过两种方法来解决服务器无图形化界面 xff0c 来操作eclipse 1 在主机上下载eclipse把需要编译的代码编译成j
  • 把ESXi中的虚拟机通过OVA/OVF导出的方式迁移到Proxmox 5

    一 前言 之前发现ESXi是免费的时候 xff0c 非常兴奋地把几台服务器都装上了 xff0c 用着确实还行 xff0c 但是用久了之后就发现 xff0c 很多高端功能需要进一步付费才能使用 xff0c 比如HA等 另外就是它还有很多局限性
  • PX4 ThoneFlow光流使用

    PX4官方光流介绍 xff1a PMW3901 Based Flow Sensors PX4 User Guide 与飞控连接 接线 xff1a G接GND xff1b V接3 3V xff1b T是TX接飞控的RX口 xff1b Y接地开
  • Ubuntu PX4无人机仿真环境配置

    目录 一 VM虚拟机安装ubuntu18 04 1 VMware安装 2 新建虚拟机 二 Ubuntu系统配置 1 更改软件安装源 2 安装中文输入法 三 PX4环境搭建 1 安装git 2 下载px4源码 3 安装ROS 4 安装MAVR
  • larave5安装过程分享-MAX OSX版本

    MAC上的平台是XAMPP xff0c 自带的版本低 我用的是XAMPP MAC版本 一 本地php环境配置 which php php xff0d v xff5c php xampp php PASH 61 34 xff0f applic
  • PX4二次开发 创建进程

    目录 一 创建进程 二 仿真测试 PX4官方手册 xff1a Module Template for Full Applications PX4 User Guide 编写参照PX4源码 src templates xff1a PX4 Au
  • 【Matlab】Matlab基础绘图整理

    Matlab基础绘图整理 一张图绘制多个子图在图片文本中添加希腊字母和特殊字符其他常用函数限制坐标轴范围添加坐标轴说明添加图例修改线条类型 标记修改线条粗细 一张图绘制多个子图 主要命令 xff1a figure 第几张图 subplot

随机推荐

  • PX4 磁罗盘干扰分析

    磁罗盘干扰分析 推力与磁场关系正常情况干扰情况与推力相关解决方法 与推力不相关 罗盘补偿操作流程获取用于分析的日志分析日志调整罗盘补偿参数 推力与磁场关系 无人机上的电机电流会干扰无人机上搭载的磁罗盘 xff0c PX4官方提供了一些方式
  • 【C++】进制

    目录 一 进制转换1 十进制转二进制2 十进制转八进制 xff08 同上 xff09 3 二进制转八进制4 二进制转十六进制5 八进制转二进制6 十六进制转二进制 二 位运算1 原码 反码 补码2 位运算符3 变换操作 一 进制转换 1 十
  • Ubuntu20.04安装ROS2+ROS2-PX4框架搭建

    目录 Ubuntu20 04安装ROS2Set localeSetup SourcesInstall ROS2 packageEnvironment setup测试 ROS2 PX4框架搭建Install PX4Install ROS2Se
  • Jetson Nano利用ROS2通过MicroDDS与PX4通讯

    目录 Jetson Nano安装Ubuntu20 04Ubuntu20 04 配置ROS2环境Pixhawk配置Jetson Nano上MicroDDS Agent配置及和pixhawk通讯 PX4在V1 14及后续版本中 xff0c 将原
  • 用速腾RS16跑LeGO-LOAM

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net Zed Of Zoe article
  • Visual Studio 2017环境配置MPI v9.0 并行编程环境

    目录 第一步 xff1a 下载安装mpi 官网 xff1a http www mpich org windows版官网 xff1a https msdn microsoft com en us library bb524831 v 61 v
  • 学习java基础的心得感悟

    学完java基础 xff0c 对java面向对象的思想有更加深刻的认识了 xff0c 从学习java语言概述到最后网络编程IDE的使用 xff0c 时间用了1个月零9天 xff0c 上课时间28天 xff0c 回首感觉快又感觉漫长 xff0
  • 如何使用SQL批量替换数据库特定字段中部分特定数据

    1 替换数据库特定字段中部分特定数据的SQL语句 SQL语句 xff1a update 表名 set 字段名 61 replace 字段名 原字符串 需要替换成的字符串 以将表exam major中的字段pos2019中的数据 50 替换成
  • 阿里云ubuntu16.04 server 配置方案 1 配置桌面环境

    首先为服务器配置一个桌面系统 升级一下哦 xff01 span class hljs built in sudo span apt get update span class hljs built in sudo span apt get
  • Xshell远程连接华为云服务器

    Xshell远程连接华为云服务器 一 关于华为云1 什么是云服务器2 为什么使用华为云3 我的华为云体验 二 控制台操作 1 设置密码 2 开放端口 3 切换系统 三 Xshell操作 1 下载Xshell和Xftp2 连接云服务器 一 关
  • 校园网网络连接反复断开又连接是什么原因?

    网络连接反复断开又连接是什么原因 xff1f 原因可能跟ARP攻击或擅自使用P2P终结者等攻击软件有关 因为校园内多个楼宇已部署防ARP攻击网络设备 xff0c 只要判断用户计算机感染ARP或使用P2P终结者 网络执法官 聚生网管等软件攻击
  • xuperchain源码分析-启动过程

    xuperchain的启动分为两个比较大的过程 xff0c 一个是节点的初始化 xff0c 另一个是挖坑的初始化
  • 通过Excel学习PID算法(一步步理解它的KP,KI,KD)

    PID原理 PID控制算是应用非常广泛的经典控制算法 但是怎么理解PID这三个参数呢 xff1f 在参考了别人的文章之后 xff0c 我还是有点一知半解 xff0c 这时候发现不自己动手算一算是很难理解PID了 xff0c 但是我又不想做这
  • 通过Excel学习PID算法(连续系统的PID)

    总结上一节 在之前 xff0c 我们用倒水的例子通俗易懂的解释了什么是PID算法 在这里先回顾一下之前的学习的内容 P表示对误差的比例系数 与目标值差多少 xff0c 就在下一次修正中加上这个误差与P的乘积 xff0c 同时会导致系统有一个
  • 原来学习是如此地苦涩

    原文链接 xff1a http blog csdn net tangl 99 article details 2047657 最近一直在忙第一篇Paper xff0c 虽然想法大致的框架成熟了 xff0c 但是还有一些细节需要完善 这几天在
  • 互联网+时代的7个引爆点(读书笔记)

    百货商场里的销售人员一直抱怨 xff0c 大家只是到自己这里来看看 xff0c 之后转身就在网上下单 从旧视角瞎看这固然是一种文体 xff0c 显示着揭示了一种新的机会 以线下体验为入口的机会 小团队精益式的迭代 xff0c 几个周期后就可
  • maperuce运算框架

    1 xff0c 概念 mapreduce 运算框架主要实现hadoop 的数据处理 xff0c 数据处理中 流经过5个节点 数据流 xff1a input gt spilt gt map gt shuffle gt reduce xff08
  • 在Python中使用print输出时,出现UnicodeEncodeError错误,错误提示为“‘gbk‘ codec can‘t encode character ‘\u2022‘ in posit

    利用chatgpt一步步解决了这个问题 xff0c 感觉ChatGPT还是太强大了 问题描述 xff1a 在Python中使用print输出时 xff0c 出现UnicodeEncodeError错误 xff0c 错误提示为 39 gbk
  • openstack一些特性资料

    Keystone RBAC nova compute Cells Bare Metal Compute 是什么东西 xff1f http wiki openstack org blueprint nova compute cells htt
  • 【神经网络和深度学习-开发案例】 第二章 神经网络结构

    神经网络和深度学习 第二章 神经网络结构 案例 xff1a 使用神经网络识别手写数字 我将介绍一个神经网络 xff0c 它可以很好地对手写的数字进行分类 为了准备这一点 xff0c 它有助于解释一些术语 xff0c 让我们可以命名一个网络的