组播流量转发管理——IGMP Snooping简述

组播——IGMP Snooping 当组播源和组成员之间为二层网络时,此时网络设备是不需要配置IGMP协议以及PIM协议的,如果此时在网络设备上配置了IGMP Snooping,则会出现以下问题(此时路由端口手动配置)只要是动态的端口,只要是端口上维持“动态”特性的协议报文(PIM或IGMP)在端口老化时间内未收到,端口就会从组播转发表中消失。该端口在2s内没有收到报告报文,则删除该成员端口,如果该成员端口收到了报告报文,重置成员端口老化时间。当端口收到IGMP报文或PIM Hello报文后,会刷新组播路由器中的路由器端口的老化时间。 阅读详情
AI摘要

在组播网络中,IGMPSnooping技术能够优化交换机上的组播流量转发,避免非组成员接收组播数据,节省网络资源。通过监听IGMP报文并建立二层组播转发表,确保组播流量仅被转发至正确接口。

问题背景

在一个交换网络中,如果部署了组播业务,那么组播数据将不可避免地经过一些交换设备,在这种场景下,有一些问题需要格外关注。

如下图所示,以太网二层交换机SW通过自己的GE0/0/20接口连接到组播路由器R1,同时它还连接着一些PC。在这些PC中,PC1及PC2是某个组播组的成员,它们将会向网络中发送IGMP成员关系报告宣告自己加组,在此之后,如果R1收到发往该组播组的流量便会将这些流量转发到该交换网络,那么组成员PC1及PC2都会收到所需的组播流量。
在这里插入图片描述
众所周知,缺省情况下,当交换机在某个VLAN内收到目的MAC地址未知的单播帧、组播帧或广播帧时,它都会将这些数据帧在相同VLAN内进行泛洪,因此SW将会把发往该组播组的流量从自己的GE0/0/1,GE0/0/2及GE0/0/3等接口都转发出去(假设这些接口都属于相同的VLAN),这么一来,即使有些PC(例如图中的PC3)不是该组播组的成员,它们也将收到组播流量,这就造成了网络带宽和设备性能的浪费。

解决方法

通过在交换机上部署IGMP Snooping可以解决上述问题。

IGMP Snooping

  • IGMP Snooping ( Internet Group Management Protocol Snooping)技术主要用于在交换机上优化组播流量的转发行为。

  • IGMP是组播中颇为重要的一个协议,组播路由器通过IGMP管理组成员,而组播接收者也通过IGMP宣告加组及离组。

  • 当路由器与组成员之间存在二层交换机时,缺省时,交换机只是简单地转发网络中的IGMP报文,不会对这些报文的内容感兴趣。此外,当交换机在某个VLAN内收到组播流量时,它会将这些流量在相同VLAN内所有接口上进行泛洪,如下图所示:
    在这里插入图片描述

  • 当交换机部署了IGMP Snooping之后,它将会侦听组成员与IGMP查询器之间交互的IGMP报文,并解析IGMP报文中的相关信息,然后结合
    这些信息与接口、VLAN-ID等建立二层组播转发表项,这些转发表项将用于指导组播流量转发,确保流量只被转发到正确的接口上。

如图所示,在SW部署了IGMP Snooping之后,当组成员PC1及PC2通过IGMP membership report报文宣告自己加组时,SW除了将这些报文转发给组播路由器R1之外,还会解析报文中的内容,将报文中的组播组地址与接口GE0/0/ 1、GE0/0/2,以及VLAN-ID等信息进行绑定,从而创建二层组播转发表项。
在这里插入图片描述
当SW收到R1发送的组播流量后,会根据二层转发表中的表项将流量从GE0/0/1及GE0/0/2接口转发出去,此时非组成员的PC3将不会收到这些组播流量。因此部署了IGMP Snooping之后,交换机只会将组播流量从正确的接口转发出去。

IGMP Snooping基本术语

路由器接口(Router Port )

  • 所谓路由器接口,指的是运行了IGMP Snooping的交换机朝向上游组播路由器的接口,比如上图中SW的GE0/0/20接口。
  • 路由器接口可通过动态的方式自动发现,也可通过手工配置的方式静态指定。
  • 当动态发现路由接口时,IGMP Snooping交换机会将其收到IGMP常规查询报文或者PIM Hello报文的接口视为动态路由器接口。
  • 交换机将在路由器接口上收到上游组播路由器转发的组播流量。

成员接口(Member Port )

  • 成员接口是IGMP Snooping交换机朝向组播组成员的接口,比如上图中的GE0/0/1及GE0/0/2。
  • 成员接口可通过动态的方式自动发现,也可通过手工配置的方式静态指定。
  • 当动态发现成员接口时,IGMP Snooping交换机会将其收到IGMP成员关系报告的接口视为动态成员接口。

二层组播转发表(Layer 2 Multicast Forwarding Table)

  • 运行IGMP Snooping的交换机会侦听IGMP查询器与组成员之间交互的 IGMP报文,并维护一个重要的数据表——二层组播转发表,该表格中的表项将用于指导交换机转发组播流量。
  • 在二层组播表项中包含组播组地址、接口信息(路由器接口、成员接口)以及VLAN-ID等信息。在交换机上使用display 12-multicast forwarding-table命令(HW)即可查看其二层组播转发表:
    在这里插入图片描述

从上述输出可以看出,交换机Switch在VLAN 10中的路由器接口是GE0/0/24。当其在GE0/0/24接口上收到发往239.1.1.1的组播流量时,它会将这些组播流量转发到GE0/0/1、GE0/0/2及GE0/0/3接口,而同样处于VLAN10中的其他接口,则不会收到该组播流量。同理,如果交换机收到发往239.1.1.2的流量时,它只会将流量转发到GE0/0/7及GE0/0/8接口。

IGMP-Snooping协议原理 目录 IGM-Snooping概述 IGM-Snooping作用 IGM-Snooping组播地址 IGM-Snooping原理 1、IGM-Snooping概述 IGMP Snooping (Internet Group Management ProtocolSnooping):IGMP Snooping,就是监听IGMP协议包,提取相应的信息,形成组播成员关系表,然后对组播业务按照组成员关系进行转发,保证组成员收到正确的的组播业务,而其余主机无法收到,从而管理和控制组播数据报文在数据链路层的转发。IGM 阅读详情

相关推荐

【无标题】华为HCIE 论述 IGMP Snooping

1.在二层交换机上,如果不开启 IGMP Snooping 功能,用户能不能正常收到组播流量 能,因为二层交换机无法记录组播MAC地址,当二层交换机接收到组播数据时,组播数据在二层中找不到相应的表项从而把组播数据进行泛洪处理,如果交换机连接用户的端口与交换机接收到组播数据的端口处于同一个vlan中,那么用户能正常收到组播流量。 2.图中,哪个端口是“路由器端口”,它是怎么形成的? IF2 生成: 动态路由器端口:由IGMP Snooping协议动态选择产生。当交换机收到源地址不为0.0.0.0的IGMP普.

DigaulesTF的博客 1920

IGMP SNOOPING是什么?

IGMP SNOOPING简介及工作原理

qq_57345314的博客 6433

IP组播-IGMPv1+v2

基础理论: IGMP是因特网组管理协议,是用来管理组播接收者的, 运行在最后一跳路由器和接收者之间,只要有接收者存在的地方,都需要运行IGMP协议, IGMP报文: 实验环境: 实验步骤: 1,配置IP地址 2,在R1 -2-3 上开启组播功能和PIM , 使用PIM DM 模式,需要使用PIM的DR作为查询器 3,在R 2 和R3 连接成员接口开启IGMPv1 4,PC加入组播组,验证R1 -23 的IGMP表项 5,验证:通过命令查看查询器 配置: 1,根据拓扑配置IP地址,三台路由器都运行OSPF

weixin_46905935的博客 1096

组播学习之——IGMP Snooping简介

IGMP Snooping (Internet Group Management Protocol Snooping)是一种IPv4二层组播协议,通过侦听三层组播设备和用户主机之间发送的组播协议报文来维护组播报文的出接口信息,从而管理和控制组播数据报文在数据链路层的转发。

baidu_20152423的博客 4903

华为交换机IGMP Snooping配置避坑指南:从基础使能到高级调优(含VLAN10实战)

本文详细解析华为交换机IGMP Snooping配置与调优方法,涵盖基础使能、查询器设置、高级安全策略及VLAN10实战案例。通过IP/MAC转发模式选择、版本兼容性设置等关键步骤,帮助网络工程师避免常见配置陷阱,优化组播流量转发效率。特别针对华为交换机特性提供验证与排错指南。

weixin_30568591的博客 206

组播协议详解

组播详解1.组播基础(1)组播简介(2)组播的地址(3)组播的MAC地址(4)组播的MAC地址(5)反向转发路径—RPF2.IGMP(1)简介(2)原理3.IGMP版本(1)IGMPV1(2)IGMPV2 1.组播基础 (1)组播简介 组播技术是指单个发送者对应多个接收者的一种网络通信。通过项多个接收方传送单信息流的方式,可以减少具有多个接收方同时收听或者查看相同资源情况下的网络通信流量。 (2)组播的地址 组播地址的范围:D类地址,前四个bit总是1110.(225.0.0.0-239.0.0.0) 保留

qq_39965491的博客 1万+

组播流量转发管理——IGMP Snooping示例

本节将通过一个简单的案例来讲解IGMP Snooping的工作机制。在图12-74中,R1是最后一跳组播路由器,其连接交换机sw的接口已经激活了IGMP(本节以IGMPv2 为例)。SW是一台以太网二层交换机,该交换机已经部署了IGMP Snooping SW的所 有接口都加入了VLAN 10。初始时SW的二层组播转发表是空的,因此即使其收到R1 转发的组播流量,它也不会将流量转发到任何接口。...

mn3321的博客 1808

IP组播基础(二)IGMP协议各版本工作原理与基础配置、IGMP Snooping工作原理

文章目录前言组播接收端的需求IGMPv1工作机制组查询与响应以及响应抑制机制成员加入组成员离开查询器选举IGMP存在问题IGMPv2改进一:组成员离开改进二:查询器选举IGMPv1与IGMPv2报文比较IGMPv3SSM模型中的新需求v3工作机制IGMP各版本差异IGMP Snooping二层中组播数据转发的问题IGMP Snooping工作原理IGMP简单配置 前言 在上一篇文章中,我们讲解了I...

Skye's Blog 6308

组播流量转发管理——IGMP Snooping代理

IGMP Snooping固然可以优化交换网络中的组播流量转发行为,然而它同时也带来 了一些问题。在图12-?8中,R1连接SW的接口作为该网段的IGMP查询器周期性地向 下游发送IGMP常规查询报文,大家已经知道SW(己经激活了IGMP Snooping)收到 该报文后会向相同ULAN中所有的接口进行转发。组成员收到IGMP常规查询报文后, 会立即发送IGMP成员关系报告报文,而SW只是简单地将...

mn3321的博客 2195

2022-11- 10 网工进阶(三十六)IP组播协议--IGMP(v1、v2、v3)、IGMP snooping、IGMP SSM Mapping、IGMP Proxy(代理)

IGMP(Internet Group Management Protocol,因特网组管理协议),是TCP/IP协议族中负责IPv4组播成员管理的协议,用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。组成员可以将加组消息发送给组播网络,从而让组播网络感知到组成员的位置和所加组播组。IGMP通过在组播组成员和组播路由器之间交互IGMP报文实现组成员管理功能,IGMP报文封装在IP报文中。到目前为止,IGMP有三个版本: IGMPv1 IGMPv2 IGMPv3。

x629242的博客 5772

IGMP-Snooping相关学习

IGMP-Snooping相关学习 定义 IGMP Snooping (Internet Group Management Protocol Snooping)是一种IPv4二层组播协议,通过侦听三层组播设备和用户主机之间发送的组播协议报文来维护组播报文的出接口信息,从而管理和控制组播数据报文在数据链路层的转发。 目的 在很多情况下,组播报文要不可避免地经过一些二层交换设备,尤其是在局域网环境里。如图1所示,在组播用户和三层组播设备Router之间,组播报文要经过二层交换机Switch。 当Router将

m0_46129105的博客 578

从零搭建高通8255车载开发环境:QNX SDP、SDK配置与镜像编译全流程

本文详细介绍了如何从零搭建高通SA8255P车载开发环境,涵盖QNX SDP部署、SDK工具链配置到多系统镜像编译的全流程。特别针对SAIL安全岛镜像构建、QNX系统优化及Android系统资源分配等关键技术点提供实战指导,帮助开发团队高效完成车载系统开发与调试。

weixin_33582311的博客 364

IGMP vs IGMP Snooping:网络层与数据链路层的分工与协作

IGMP是TCP/IP协议族中的互联网组管理协议,用于实现组播通信中的成员管理。它通过“查询-报告”机制让路由器动态维护组播成员列表,仅向有需求的网络段转发数据,从而节省带宽、提升效率。IGMP Snooping是其在二层的延伸,通过监听报文优化交换机端口的组播转发。两者在数据中心、流媒体等场景中发挥关键作用。

asterfusion的博客 547

win 11bitlocker恢复密匙一般情况的解决方式(这里指的是你现在使用的微软账户一直没有变更过)

本来没有打算写这一篇解决帖子的,但是最近好多微博的友友都在私我询问解决方法,孩子虽然很热心,但是真的回复不过来了,打字太累了,这里给大家简单指个路,希望能够对大家有所帮助。 当时出现这个问题的时候,一搜网上的解决方法都是重装系统什么的,真是吓死孩子啦。后来去微软的官网倒腾了半天解决了问题。其实只要你没有改过微软账户,你可以直接试试我这个方法,大概三到五分钟解决问题吧。 和我情况不一样的也可以参考一下贴吧里一些大佬的分享,或者实在着急我感觉去淘宝上找个解决也不是未尝不可。 出现问题: 解决方案: 直接去微软

zhiqingxue的博客 2万+

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications

本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。

qq_21843433的博客 615

组播 IGMP Snooping 实验效果

IGMP Snooping 能有效控制组播流量,仅转发给感兴趣的接收者,减少网络拥塞,提升网络效率。验证 IGMP Snooping 在交换机上的效果,确保组播流量仅转发给感兴趣的接收者,减少不必要的网络流量。在组播源上启动组播流(如视频流),设置组播地址(如 239.1.1.1)。确认组播流量仅转发到 PC1,PC2 无组播流量。组播流量仅转发到加入组播组的设备(PC1)。当 PC2 加入组播组时,开始接收组播流量。当 PC1 离开组播组时,停止接收组播流量。让 PC2 加入组播组,观察流量变化。

m0_63642217的博客 606

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 683

华为设备IGMP Snooping配置命令

华为设备IGMP Snooping配置命令

Tony_long7483的博客 3164

【WRF安装(2025)】服务器移植 WRF 安装环境

【WRF安装(2025)】服务器移植 WRF 安装环境

WW、forever的博客 106

【WRF数据准备】土地利用数据-MODIS MCD12Q1数据下载及制备

【WRF数据准备】MODIS静态地理数据下载及制备

WW、forever的博客 3413

监控网络卡顿的元凶是什么?可能就是你没开 IGMP Snooping

IGMP Snooping 是工业网络中控制组播泛洪、保障带宽和实时性的关键技术。它通过监听 IGMP 报文,精准识别哪些端口真正需要组播,从而避免摄像头视频流或监控广播在网络中无序扩散。

fiberroad的博客 980

从0到1:用Claude 3.7十日拿下教育部课题申报书(附可修改LaTeX模板)

🟣"作为教育部人文社科项目评审专家,请根据近三年立项数据分析,为[您的学科方向]领域推荐5个具有创新性且符合'十四五'规划的重点选题,要求选题体现交叉学科特征,并标注潜在理论突破点"🟣"根据前期研究基础,创建包含4个研究模块、12个关键节点的三维技术路线图,要求体现实验仿真-实证研究-理论建模的螺旋递进关系,并标注每个节点的预期成果形态"🟣"现在切换至教育部学科评审组组长模式,从选题价值、创新程度、研究可行性三个维度对本申报书进行盲审,生成包含9个扣分风险点的诊断报告及修改优先级排序"

智能AI让学术科研更容易 545

组播应用场景_HCNP学习之-组播

组播multicast ,一次发送一组人接收组播应用场景:广播电视、音视频会议系统、电视直播。1. IP协议把224.0.0.0 ~ 239.255.255.255之间的IP地址都用做IP组播地址224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;224.0.1.0~224.0.1.255是公用组播地址,可以用于In...

weixin_39590453的博客 2472

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

实战复盘:如何用华为IGMP Snooping优化酒店IPTV网络,解决卡顿与广播风暴

本文详细介绍了如何利用华为交换机的IGMP Snooping功能优化酒店IPTV网络,解决卡顿与广播风暴问题。通过精准配置组播流量管理,实现视频流精准投递和带宽保护,显著提升网络性能与用户体验。文章包含关键命令、配置步骤及效果验证,为类似场景提供实用参考。

weixin_42531494的博客 402

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

带你走进华为组播IGMP 简单易懂

作用:IGMP用来在接收者主机和与其直接相邻的组播路由器之间建立和维护组播组成员关系。 IGMP snooping 的作用是减少组播流量的泛洪。

艺博东的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 组播服务模型——SSM
下一篇: 组播流量转发管理——IGMP Snooping示例
nice阿宝
博客等级 码龄7年 138粉丝 92原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值