WPA2密钥重装攻击原理分析

Wifi 认证,关联,四次握手(WPA/WPA2/WPA3-SAE) SAE 采用了“互联网工程任务组(IETF)”RFC7664 规范中定义的 “蜻蜓(Dragonfly)” 握手协议,将其应用于 Wi-Fi 网络以进行基于密码的身份验证。SAE 采用了“互联网工程任务组(IETF)”RFC7664 规范中定义的 “蜻蜓(Dragonfly)” 握手协议,将其应用于 Wi-Fi 网络以进行基于密码的身份验证。站在用户的角度,设备连接这两种协议(WPA2-personal 和 WPA3-SAE)的热点没有任何操作上的区别。其中 四次 eapol key 属于四次握手的过程。 阅读详情

最近Wi-Fi wpa2 安全模式曝出了安全漏洞,攻击者可以通过拦截wpa2四次握手的Msg4报文,利用Wi-Fi client对AP端重传的Msg3报文的处理,来达到reinstall PTK & GTK,从而破解传输报文的目的,下面这篇文章讲的比较详细,分享下:

WPA2密钥重装攻击原理分析


壹、WPA2的机制

无线通信协议有很多,例如WEP,WPA等都已经被证明不安全,还有TKIP机制也有大量文献说明其缺陷。WPA2协议是WIFI联盟一直力推的协议,被广泛运用在现在的无线互联网络当中;CCMP(Counter Mode CBC-MAC Protocol   )我之前也被推行过很长一段时间,现在有新的GCMP,不过都是基于计数器CTR的,都类似。我下面会以WPA2和CCMP为例解释此次事件。

在WPA2中运用了丰富的密码手段,原因是无线信道的开放性必须有加密措施来保证传输过程的安全。握手协议则是通信双方互相进行一个身份确认的过程。WPA2的四次握手协议是EAPOL(EAP on LAN,即 Extensible Authentication Protocol on LAN)的四次握手协议的落地,,所有的数据包都是使用EAPOL帧进行封装的,EAPOL数据帧的格式可以参考下图:

israbye FreeBuf.COM

图1:EAPOL帧结构,来源Mathy Vanhoef团队论文(https://papers.mathyvanhoef.com/ccs2017.pdf)

关于EAP协议:之前在西电上课刚接触到的时候就理解了好一会,因为它不像TCP/IP一样是直接落地的协议。它是一个密码协议,用到相同的密码手段的地方都可以使用它,然后再在不同场景转化为落地的东西,所以一定意义上可以理解成是“指导协议的协议”。所以我看来,这次四次握手出现的问题,也很有可能在其他用到类似密码手段的地方重新出现。这里涉及到很多密码学通用的概念,因此尊重作者,下文将AP(wifi接入点)称为认证方(Authenticator),待接入的STATION称为请求方(Supplicant)。

该帧中关键的点有如下几个

header部分标志了该帧的用途。

replay-counter是一个计数器,用于防止重放攻击:认证方下发认证请求时,设置该值,请求方在回应认证要求时,使用相同的值;在一系列会话中,该计数器递增。

nonce 部分存放之后生成密钥要使用到的值。注意,这里的nonce不是我们后面会话中的nonce。

MIC 作为完整性校验部分,可选。

KeyData 部分未来存放group key用,这里不展开。

那么接下来还是看一下WPA2的4次握手的过程:

israbye FreeBuf.COM

图2:来源wikipedia

握手之前会有一些无线发现的过程;WPA2 的4次握手,目标是完成身份认证,建立会话密钥;握手之后是组密钥协商过程,此次事件在这里也发现有问题。

这里很重要,我阐述一遍四次握手的过程。

①、由认证方发起,下发一个握手请求,并且发送了认证方随机生成的nonce值ANonce。

②、申请方收到ANonce之后,也随机生成一个SNonce发还给认证方,同时附加MIC值。

双方在具备两个nonce之后,就可以开始分别计算PTK(Pairwise Transient Key)了。PTK的计算方法可以看作是计算(PMK,ANonce,SNonce,认证方的MAC地址 ,请求方的MAC地址)这样一个5元组的哈希值。这里的PMK(Pairwise Master Key)则可以看作是ssid和口令(就是平常的wifi密码,不过这里实际是先又口令生成PSK,再到这里)的哈希值。

MIC值是PTK的前16个字节。这里如果双方的MIC一致,说明PMK生成的一致,则说明双方拥有的口令一致(即输对了wifi密码),那么认证方就认可请求方的身份了。

③、认证方生成并发放组会话密钥,同时下发另一个MIC。 

④、最后请求方回应一个Ack完成会话。

之后通信双方就可以使用PTK中的各种密钥进行安全的通信了。

贰、问题所在

佩服他们的想法,他们意识到一点,在收到握手包③之后,请求方就会认为生成的PTK是正确的,而不清楚也没有办法验证认证方是否收到了握手包④,安装PTK并开始进行使用其派生的密钥作为CCMP的会话密钥,通过802.1x进行通信了。

而且,在协议的实现上有规定:1、每次生成PTK之后,都要重设CCMP的计数器的值。(有关计数器后面再说)2、处在已经安装PTK状态下的请求方要处理重传的握手包①和③

而对于认证方而言,则不会安装PTK。如果认证方收不到握手包④就会重传握手包③,同时递增其中的replay-counter值来使其有效。这样就出现问题了,一个显而易见的攻击方法是:

攻击者可以事先在申请者和认证者之间占据一个中间人的位置。然后通过阻断握手包④到达认证方来时认证方发送新的握手包③。这样就导致申请方会重新安装PTK,这样,就能够重设CCMP中的计数器。而且基于不同的会话加密协议,可以实现如重放、解密、伪造等能力略有不同。

如何实现中间人:不能简单做中继因为PTK的计算使用到了双方的MAC地址。Mathy Vanhoef团队的方案是使用基于信道不同的AP克隆,同时也保持MAC地址一致。 

一个基础的攻击模型如下:

israbye FreeBuf.COM

在第一阶段,阻断了回传的握手包④。然后截获了加密的数据报文。然后再下一次认证方发起重传时,再转发之,实现密钥重安装,之后又得到一份计数器被重用之后的密文。如下图,CTR模式下面,密钥流和计数器是关联的,计数器重用就相当于密钥流复用了,在密码学上就标志这短明文沦陷了。而且可以通过重复握手过程来多次实施该攻击。

israbye FreeBuf.COM

图4、CTR模式的加密图解(来源wikipedia)

虽然计数器重用以后离恢复明文还有一些密码学上面的路要走,但是该团队还发现了很多有意思的协议实现上面的BUG,导致这个攻击能够相当有威力。就比如视频中演示到的,linux和Android重安装之后的加密密钥变为了空;还有对重传replay字段校验不严格等等也导致了有意思的错误。


KRACK漏洞检测实战:使用krackattacks-scripts工具集验证WPA2密钥重装攻击 无线网络安全是网络通信的基础保障,其核心依赖于WPA2等加密协议建立的信任机制。WPA2协议通过四步握手过程协商加密密钥,确保数据传输的机密性和完整性。然而,协议设计中的密钥管理逻辑存在缺陷,可能被攻击者利用重放握手消息触发密钥重装,导致加密计数器重置,严重破坏安全性。这类漏洞的检测对于渗透测试、安全评估和网络运维具有重要价值,能帮助识别未修复的设备和验证补丁有效性。在无线渗透测试和物联网安全评估场景中,使用专门的检测工具进行主动验证是标准实践。本文聚焦于KRACK(密钥重装攻击)漏洞,详细解析如何利用kr 阅读详情

相关推荐

物联网Wi-Fi密钥重装攻击检测:原理、方案与树莓派实战

Wi-Fi安全协议是保障无线网络通信机密性与完整性的核心技术,其核心机制在于通过四次握手协商动态会话密钥。然而,WPA2/WPA3协议中存在的设计缺陷——特别是密钥重装漏洞——可能被攻击者利用,通过重放握手消息迫使客户端重置密钥状态,导致加密密钥流重复,进而破解密码或解密通信。这一漏洞在物联网场景下危害尤为严重,由于设备同质化高、长期在线且更新困难,单点漏洞可能引发大规模网络沦陷。针对此威胁,有效的检测方案需结合网络侧流量分析与设备侧固件防护,例如通过监控异常握手重传模式或集成驱动层状态检查。本文聚焦物联网

weixin_32428571的博客 228

EAPOL四次握手流程

EAPOL四次握手流程

加油鸭 4457

Krack攻击深度解析:WPA2协议漏洞原理、复现与防御指南

无线网络安全是当今网络通信的基础保障,其核心依赖于加密协议来保护数据传输的机密性与完整性。WPA2作为过去十几年广泛采用的Wi-Fi安全标准,通过四次握手过程协商动态密钥,为无线通信提供了理论上的安全保障。然而,协议实现中的状态机缺陷可能被利用,导致严重的安全风险,这正是Krack(密钥重装攻击)所揭示的技术原理。Krack攻击不依赖于密码强度,而是通过干扰握手过程,迫使客户端重新安装已使用的加密密钥,从而破坏加密流的状态,使得攻击者能够解密甚至注入网络流量。这种攻击凸显了协议层逻辑漏洞的广泛影响,其技术价

420

WiFi安全技术及wpa连接四次握手

无线安全技术 1) WEP(Wired Equivalent Privacy有线对等保密) 最早的无线加密体制,由于算法的缺陷很容易被破解。抓包获取在数据流中明文传输的IV,再通过统计学方法用IV得到密钥。 2) WPA 在不升级硬件的前提下,WAP使用TKIP(Temporal Key Integrity Protocol临时密钥集成协议) 来实现WLAN的访问控制、密钥...

好记性不如写博客! 6737

WiFi网络WPA2 KRACK漏洞分析报告

作者:东帆@阿里安全技术平台团队 ———————— 0x00 漏洞概述 安全研究员Mathy Vanhoef发现的WPA2协议的KRA(Key Reinstallation Attacks)漏洞,利用WPA2协议标准加密密钥生成机制上的设计缺陷,四次握手协商加密密钥过程中第三个消息报文可被篡改重放,导致在用密钥被重新安装。 WiFi网络通过WPA2

AliMobileSecurity的博客 1694

WPA2四次握手与密钥安装:从协议原理到安全实践

在无线网络安全领域,身份验证与密钥协商是构建可信通信的基础。其核心原理在于,通信双方通过交换随机数等参数,基于共享密钥动态派生出唯一的会话密钥,从而实现前向安全性与会话隔离。这一机制的技术价值在于,它能在不安全的传输媒介上建立安全的加密通道,有效防止窃听与重放攻击。典型的应用场景包括家庭Wi-Fi、企业无线网络以及物联网设备连接。本文聚焦于WPA2/WPA3中的四次握手协议,深入解析其如何通过EAPOL框架完成密钥协商,并最终驱动密钥安装至硬件,其中密钥安装失败是导致连接问题的常见原因,而WPA3的SAE握

weixin_30298497的博客 319

WPA/WPA2安全认证加密原理详解

1.WPA加密版本介绍 WPA加密算法的的两个版本介绍 WPA = 802.1x + EAP + TKIP +MIC = Pre-shared Key + TKIP + MIC 802.11i(WPA2) = 802.1x + EAP + AES + CCMP = Pre-shared Key + AES + CCMP l802.1x + EAP,Pre-shared Key是身份校验算法(WEP没有设置有身份验证机制) lTKIP和AES是数据传输加密算法(类似于WEP加密的R...

流风回雪的博客 1万+

无抓包无字典破解WPA/WPA2加密的无线网络技术说明

网络安全,简而言之,是指保护网络及其组件免受未经授权的访问、攻击、修改和破坏的一系列活动。随着数字化的进程,网络安全已经涉及到数据的完整性、保密性和可用性。网络安全的重要性不言而喻:保护个人隐私:个人的通讯记录、银行信息、健康数据等都可能成为攻击者的目标。维护企业资产:企业运营依赖于关键数据,一旦数据被窃取或损坏,可能导致巨大的经济损失和信誉损失。保障国家安全:在网络时代,重要基础设施如电力、交通、医疗等都依赖于网络控制系统,网络攻击可能造成国家层面的严重后果。

weixin_42629522的博客 1354

WPA 4次握手

分析wpa/wpa2 4-way handshake的过程和原理

红心地瓜的专栏 1万+

【GD32篇】驱动AD7616完成数据采集

GD32F10X驱动AD7616完成数据采集

we_long的博客 1万+

手把手调试Android 14 ShellTransitions:用Log追踪ActiveTransition与Handler匹配过程

本文详细介绍了在Android 14中调试ShellTransitions机制的方法,重点通过Log追踪ActiveTransition与Handler的匹配过程。文章提供了关键日志点植入策略、Handler匹配机制解析及实战调试案例,帮助开发者解决窗口转场动画中的卡顿和错乱问题,提升系统动画性能。

weixin_42652674的博客 429

【2019-11-20】WPA与WPA2简单笔记

WPA和WPA2是Wi-Fi安全标准,分别基于TKIP和CCMP/AES加密,用于替代有严重漏洞的WEP。本文简述WPA/WPA2的认证模式(Personal/Enterprise)、加密机制和关键安全改进。

cstriker1407的专栏 233

ctle电路求帮忙分析低中高频调节原理,搭好了电路该怎样调节参数?

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 1126

关于无线网络WPA2的四次握手及中间人攻击

WPA加密算法的的两个版本介绍: WPA = 802.1x + EAP + TKIP + MIC = Pre-shared Key + TKIP + MIC 802.11i(WPA2) = 802.1x + EAP + AES + CCMP = Pre-shared Key + AES + CCMP 这里802.1x + EAP,Pre-shared Key是身份校验算法(WEP没有设置有身份验证机制) TKIP和AES是数据传输加密算法(类似于WEP加密的RC4 算法) MIC和CCMP数据完整性编码校验

CrotZZ的博客 3057

进阶05:Labview与汇川PLC通过OPC UA通信(AM500系列)

本文介绍了LabVIEW与汇川PLC通过OPC UA通信的实现方法。主要内容包括:1)编写汇川AM521 PLC结构化文本程序,配置OPC UA服务器并导出变量;2)使用UaExpert客户端测试读取PLC变量;3)开发C#封装库实现OPC UA连接、读写和订阅功能;4)在LabVIEW中创建通信类,封装dll功能;5)设计LabVIEW界面实现变量读写和PLC程序触发。最终实现了PLC变量监控、数据读写及Y1-Y4输出控制功能,为自动化系统开发提供了基础框架。

weixin_38637405的博客 1302

AEJoy —— 最受欢迎的 5 个 Ae 表达方式

NOTE] 原文作者我意识到表达式可能令人生畏,有些人宁愿复制粘贴有用的代码,而不愿学习这门语言。对此我完全理解。因此,我想与您分享我的。这些是我几乎在每个项目中都会使用的表达式,我认为它们极大地提升了工作流程。

ShaderJoy 的兴趣技术杂货铺 363

WPA2 KRACK Attacks 原文转载翻译

写在前面:博主水平有限,翻译中如果出现错误,还希望大家能够指正。 原文链接:https://www.krackattacks.com/ Key Reinstallation Attacks (krack) key 重装攻击简介我们发现了关于WPA2的重大漏洞,WPA2是一个确保所有现代无线网络被保护的协议。当攻击者在受害者的一定范围内就可以利用这些漏洞来使用 KRACK 攻击。具体地说,攻

灰蜗牛 2878

【时时三省】vector cast 常见错误解决/vcast常见错误解决

介绍在使用 vector cast/vcast 软件的过程中,遇到的异常问题。其它异常可以私信解决(购买专栏的前提下)。

时时三省的博客 448

WPA2 与 WPA3:深入解析Wi-Fi安全协议

因此,当消费者选购支持Wi-Fi 7的先进设备时,他们不仅能体验到高达5.8Gbps的理论速度 和多链路操作(MLO)等尖端功能 ,也必然获得了WPA3带来的顶级安全保障。有线等效保密(WEP),1997年 作为全球首个Wi-Fi安全协议,WEP提供了基础级别的安全保障,但其静态加密密钥的机制存在重大漏洞,极易受到暴力破解,很快便被时代淘汰。WiFi保护访问3(WPA3),2018年 WPA3带来了多项关键的安全改进,不仅显著增加了攻击难度,也为日益普及的智能家居和物联网设备提供了更强的保护。

Qogrisys无线连接方案商 2898

使用MATLAB/Simulink对一个简单的智能家居温湿度监测与控制系统进行建模和仿真

目录手把手教你学Simulink——基于Simulink的智能家居温湿度监测与控制仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:构建传感器模块步骤3:添加控制器步骤4:构建执行器模块步骤5:连接各部分步骤6:设置仿真参数步骤7:添加观测器步骤8:运行仿真并分析结果四、总结 智能家居系统中的温湿度监测与控制系统是一个典型的物联网(IoT)应用场景,它通过传感器收集环境数据,并根据预设条件自动调节室内温度和湿度以提高居住舒适度。本指南将介绍如何使用MATLAB/S

xiaoheshang_123的博客 291

【AI智能体】Codex 生成高质量电商套图实战操作详解

Codex 生成高质量电商套图实战操作详解

congge 4519

krackattacks-scripts完全指南:如何检测WPA2中的KRACK密钥重装攻击

**终极指南:使用专业脚本检测KRACK攻击,保护你的Wi-Fi网络安全!** 🔐 你是否担心自己的Wi-Fi网络可能受到KRACK(密钥重装攻击)的威胁?krackattacks-scripts项目提供了一个完整的解决方案,让你能够检测客户端和接入点是否受到WPA2协议中KRACK漏洞的影响。这个开源工具集由安全研究人员开发,是检测CVE-2017-13077、CVE-2017-13078和

gitblog_00521的博客 301

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WPA2-PSK的取代者:WPA3-SAE

WPA3是Wi-Fi联盟推出用于取代WPA2的第四代通信加密技术。WPA3通过引入SAE握手协议增加了字典法暴力破解的难度和提供前向保密,相较于WPA2的安全性有很大的提升。

kerberos333的博客 7792

深度学习工具包 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")

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: TLS加密套件
下一篇: 谈谈Wi-Fi的安全模式
LinuxG_G
博客等级 码龄15年 58粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值