做架构并非朝夕之功 在实践中“悟道”

Picture of ssh key 立即下载
原文:  http://tech.it168.com/a2016/0927/2941/000002941887.shtml

做架构的一点心得总结。
------------------------------------------
【IT168 专稿】一套工具集合,包含7个独立工具、30多万行代码…相信行业内的老司机们都知道小编说的是啥——数据库管理工具。他,从入行到现在,15年里,从数据库管理工具到接口驱动程序再到数据库内核,把数据库相关的研发工作完整地实践了一遍。因此对软件系统框架结果有了深度把握。他说“走上数据库架构师这条路,如人生的行进,偶然中蕴含着必然。”这就是小编本次的采访对象,SACC2016中国系统 架构师大会的嘉宾:华胜信泰数据库架构师李海翔。

做架构并非朝夕之功 在实践中“悟道”
▲华胜信泰数据库架构师 李海翔

  扎实的基本功 畅游数据库内核“汪洋大海”

  为了实现数据库管理工具集、7套工具统一风格、统一操作、统一UI,李海翔探索出了MVC(Model View Controller,模型(model)-视图(view)-控制器(controller))改进模型,把model变为2层,底层映射数据库的实体数据,7个工具可以共用底层的model,上层为不同工具定制UI展现特性,很好地解决了数据模型需要和不同工具的UI分离的问题。在采访中,李海翔发自肺腑的感言:这次成功的尝试让我初步体会到了架构的魅力,体会到做架构并非一朝一夕之功,而是在实践中不断学习、不断思考、不断改进、不断总结而来的,只有在实践中摸索、领悟才能逐渐“悟道”。

  正是架构的魅力,推着李海翔一步一步踏实的规划着自己的职业道路。2006年,李海翔开始从事数据库内核研发工作。他形容,数据库内核犹如一片汪洋大海,广袤而深邃…

  李海翔先是接触了高可靠分支,从事了备份恢复、日志管理等内核相关工作,之后又从事过底层的存储、中层的数据对象访问、数据库安全、SQL优化等相关工作,由深度而到广度再深入,打下了扎实的基本功。这段时间的工作,让他“认识”和“熟悉”了数据库内核的各个模块。

  李海翔继续说道:“如果仅限于此,还不能完全“相知”,便不能承担起架构师的职责。”在工作中,他不断思考功能如何实现,模块功能极限等问题。这使李海翔逐渐架构起了模块之间的桥梁。思考模块间的关系帮他逐步融会贯通了零散的知识点,对数据库内核逐步相知、深知;思考模块的功能极限,如存储层单表最大容量、多进程架构的数据库系统可支持的会话数与共享内存的关系等,让他认识到做架构不能浮于表面,而要深入到真实需求产生的真实体系结构要求中,要考虑系统的安全、性能、容量、扩展性等真实体系结构的要求。”

  随后李海翔又跳出数据库内核,从事了一段时间的数据库测试技术和测试部门的管理工作。他说“这让我站在数据库之外,以测试者的身份、以观察者的身份、以使用者的身份从整体上看待数据库的产品体系,这让我“视角大开”:从事过的工种多则建立的联系点多而倍感开阔,做架构设计需要这种极为广阔的视野,做数据库的架构设计需要考虑整个产品线的产品体系架构和各个产品各自的架构特点,需要先能庖丁解牛般掌握自己面对的对象,然后才能抽象出框架结构、进而析“结构”,然后成“架构”。

  没有这段经历、似乎做一名数据库架构师会有所缺憾,以单一视角看待一个事物难以窥得庐山真面目。所谓架构师做架构的设计,首先重要的就是先“解构”,面对数据库的解构能力代表着能清晰掌握数据库体系结构的方方面面,有过深入才能浅出。”

  经历了十多年的国产数据库研发工作后,李海翔来到Oracle做了两年查询优化工作。在国际化的研发环境和氛围中,与同事们一起开发MySQL的优化器,体会到了优化器在数据库整体结构中统领、驱动SQL执行的重要性。

  谈到职业规划,李海翔的经历可以说给了初学的开发者丰富宝贵的经验。他说:“如果没有之前丰富的数据库多工种研发和测试经历,没有深入内核又潜出又深入内核的经历,没有在管理工作中感受组织架构,没有在生活中体会感悟不同的人性,则不会走上今天的架构师之路。”

  人生亦架构 认真对待架构好人生

  虽说从事技术开发相关工作,但业余时间李海翔把一些个人的心得体会都倾注在《数据库查询优化器的艺术》这本书上。他说“业余时间,我喜欢动笔。其实是动键盘,在键盘上锻炼自己手指的麻木性。”把那些分享过的技术串联,就有了这样一本讨论查询优化技术的书籍。

  李海翔在采访中说:写书之初,不是为了写而写,不是为了名而写,是为了梳理“产品--架构--设计--投入--完成”这一全套过程。其中,书的框架结构设计的过程犹如软件的架构设计,为了让读者能够看懂和理解,要设计好如何设置各个章节的内容,如何将纷繁复杂而又极具深度的知识点行云流水的展现出来。做软件的架构设计,也应当是从用户使用的实际情况出发,而考虑功能、性能、容量、扩展、安全等何时独立,如何融合。

  人生亦架构,认真对待倾注灵魂,即能架构好人生。

  参加SACC又是一次自我提升

  李海翔之前参加过多次DTCC数据库技术大会,但今年的SACC大会是第一次参加。他开心的说“对自己而言,参加SACC架构师大会,是又一次难得的提高和学习的机会。”

  加入华胜信泰之后,李海翔主要负责数据库技术架构相关工作和架构部的管理工作。谈到最近的关注,李海翔觉得数据库技术架构,有很多有意思的内容,比如Informix在架构上以类协程的技巧在单进程用户态中实现了操作系统内核态实现多进程的功能…另外,除了关注Informix自身的技术外,他还关注着数据库的经典技术事务处理相关技术、关注着分布式数据库技术的发展和架构等。

  当谈到成为了一个架构师之后有怎样的体会,李海翔强调:要反复观察、不断思考,在改进中觅得最好的架构设计;要注重体系结构的内在需求,关注安全、性能、容量、扩展性等关键点的架构设计;要思考整体和重点的关系,注意培养“解构”能力;要思考软件体系与工作生活的关系,应对波峰和低谷,做好扩容便于灵活扩展,有取有舍,就能架构好每一个产品。

  架构师应更多注重“读代码”

  谈到架构师是否应保持写代码这个习惯,李海翔表示“术业有专攻,似乎写代码是程序员的事情。但是,个人认为,架构师应在更高层级上“写代码”,应更多地注重“读代码”。软件开发中有一些工作,尤其是类似数据库系统这样的复杂系统的一些框架性代码(未必是核心算法的代码),非架构师而不能为,架构师应写这些框架性的代码,用代码流畅地体现出架构设计的思想。

  另外,对于架构师,我认为比写代码更重要的是 “读代码”。读什么代码呢?一是读本领域内的经典代码,比如做为数据库内核开发的架构师,应该多读PostgreSQL的代码以领略代码的优美,读MySQL的代码以领略其实用之风。读本领域的代码可以开阔自己的思维,同一个思想、设计不同数据库有不同的实现方式,所以读本领域的经典代码细细体会和品味,之后可以把学习到的可以运用到自己的工作实践中。二是读本领域相关的其它领域的代码,如读一读Linux内核源码,读一读应用中间件的代码等,这样可以扩展自己的知识体系的深度,让自己所做的架构设计能更好地与周边环境相融。一个软件的架构不仅是支撑本软件体系结构的,而且要使得本软件对外能与操作系统协调、与应用协调。

  多读代码,犹如找到一位位良师益友。”

  写在最后

  对于云时代的平台架构如何发展,李海翔说:在数据库方面,数据库云会得到发展并普及,分布式数据库将成为数据库云的基础设施,伪分布式数据库中间件将进入垃圾篓。

  在即将到来的SACC2016架构师大会上,李海翔透露将分享“数据库引擎技术架构”,是对关系数据库架构技术的一次总结。

做架构并非朝夕之功 在实践中“悟道”

  “恰逢金秋,精心架构,数年心血终得硕果。

  精华荟萃,大师相聚,三天时光结识良友。

  愿架构师大会架构起技术交流的大桥,祝架构的技术之路越走越宽敞!”

  在采访的最后,这个“技术文青”为2016中国系统架构师大会送上了这首祝福的诗。如此有情怀又懂技术的嘉宾,让我们同期待他在SACC的舞台上一展风采!

  作为国内最受欢迎的架构师盛会,2016年第八届中国系统架构师大会SACC即将于10月27-29日在北京盛大召开。本届大会以"架构创新之路"为主题,安排两大主场和24个专场。届时,来自互联网、电子商务、金融、电信、政府、行业协会等20多个领域的150多位技术专家将汇聚一堂,共同探讨云计算和大数据时代下,如何通过架构创新来实现企业的快速转型。更多内容请访问大会官网:http://sacc.it168.com/

政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈?.docx 政府科技管理者在推动区域科技成果转化过程中,如何系统性地识别和分析创新资源的配置瓶颈? 立即下载

相关推荐

政府科技管理者如何提升区域科技成果转化项目的评价与筛选效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

480位禅宗大德悟道因缘

 1.二祖慧可大师悟道因缘  二祖慧可大师,俗姓姬,虎牢(又作武牢,今河南成皋县西北)人。其父名寂,在慧可出生之前,每每担心无子,心想:"我家崇善,岂令无子?"于是便天天祈求诸佛菩萨保佑,希望能生个儿子,继承祖业。就这样虔诚地祈祷了一段时间,终于有一天黄昏,感应到佛光满室,不久慧可的母亲便怀孕了。为了感念佛恩,慧可出生后,父母便给他起名为"光"。  慧可自幼志气不凡,为人旷达,博闻强记,广涉儒书,尤精《诗》、《易》,喜好游山玩水,而对持家立业不感兴趣。后来接触了佛典,深感"孔老之教,礼术风规,庄易之书,未尽

v_xuelingxing666的博客 3478

高校技术转移办公室人员在成果转化过程中如何快速提升技术推介效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

那海蓝蓝

李海翔,网名“那海蓝蓝”,腾讯金融云,数据库技术专家。    从事数据库研发、数据库架构、数据库技术管理等工作10余年;    历任人北京大金仓研发中心多个项目的技术经理、测试部经理、测试中心总监;    Oracle公司MySQL全球开发组Optimizer Team的核心开发人员;    北京华胜信泰数据技术有限公司,数据库首席架构师,兼研发中心副总经理;    现任职腾讯科技公司,金融云,数

那海蓝蓝的博客 3245

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文档系统性地介绍了基于Simulink平台的两相交错并联Boost电路仿真模型,属于电力电子变换器建模与仿真研究的重要组成部分。该模型采用交错并联结构,有效提升了系统效率、降低了输出电流纹波,并具备优良的动态响应与系统稳定性。文档不仅聚焦于该特定拓扑的开环与闭环控制实现,还整合了丰富的配套资源,涵盖多种主流DC-DC变换器(如Buck、Boost、LLC、CLLC)、功率因数校正(PFC)电路、PWM整流器、双向充放电系统以及新能源应用场景(如V2G、微电网)等领域的仿真模型。资源体系强调软开关技术、多相交错控制、系统级建模与参数优化设计,所有内容均提供可运行的Simulink仿真文件,部分包含详细的设计报告、计算书及参考文献,具有较强的工程实践与科研复现价值。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的硕士博士研究生、高校科研人员,以及从事新能源发电、电动汽车、电源系统设计等领域的工程技术人员。; 使用场景及目标:①支撑高校电力电子与电力系统方向的科研项目,用于新型拓扑结构的建模与先进控制算法的验证;②服务于本科生与研究生的毕业设计、课程设计及高水平学术论文的仿真复现;③为企业在电源产品研发、新能源系统集成等环节提供成熟的仿真方案参考,缩短研发周期,降低试错成本。; 阅读建议:建议使用者首先访问文档末尾提供的完整资源目录链接,按需下载对应仿真模型;在实践过程中,应重点关注模型的参数配置、控制策略实现细节与仿真工况设置,结合配套的说明文档深入理解其工作原理与设计思路,推荐在MATLAB/Simulink环境中动手调试与二次开发,以充分掌握电力电子系统的核心技术。

一篇文章将三极管讲透:三极管从原理到应用,从参数到特性,从入门到精通

晶体三极管(Transistor)是一种半导体电子器件,也是电子工程中最基本的元件之一。它有三个区域,分别是P型半导体,N型半导体和P型半导体,从而形成PNP型晶体三极管或者NPN型晶体三极管。

学习帮的博客 9万+

作业设计

“http://www.w3.org/TR/html4/loose.dtd”> 念魔 (浙)Eddy书于杭州 朝夕作苦道难求,孺子十年试秀元。 空门万遁法非相,梦回书缕暖司间。 尘世一遭身是客,明去菩提冷界千。 何时入魔渡己念,小心真假不沉眠。 body { background: url(‘http

eddy1897的博客 337

谷歌(Google) Pixel 8/9 Pro(xl)如何获取 root 权限

谷歌(Google)Pixel8/9Pro(xl)等系列手机破解后,会在你的init_boot.img同路径生成一个magisk_patched.img,把这个文件拷贝到adb目录下,稍后还得把它刷回手机,这样手机才能获得Root权限,因为安卓14、15以后的内核结构调整,和Pixel7及以下的6、5、4、3、2等系列手机破解稍微不一致。因为ROOT权限的获取,需要使用ROM中的内核文件,个人强烈建议在官网下载ROM,直接刷最新版,其他地方的ROM如果没有校验码,请自行斟酌是否使用。

bugsycrack的博客 3486

计划给予心脏公式

程序开发中的各种报错并不能归为BUG,至少它们比BUG还要低一个等级。由于这个阶段你还没有写出真实可用的程序,开发又进行不下去了,着实郁闷。近期在帮人解决报错时突然悟道:报错,事实上就是七个字——"少了,多了,对不上"。控制台输出的报错日志99%的报错都是这三个原因造成的。 "少了",顾名思义就是程序找不到须要的资源了。著名的"java.lang.ClassNot...

weixin_34126557的博客 79

《机器人学一(Robotics(1))》_台大林沛群 第 3 周 【机械手臂 顺运动学】Quiz 3

的方向,旋转方向与四指弯曲方向相反,为负, α为 -90。的方向,旋转方向与四指弯曲方向相反,为负, α为 -90。bug 的图 要求解的 i 位置有误 两套 题目?B. 第2个 坐标系 的原点位置 不便于 计算;上面的正确,后两题 有误, 不知道问题在哪里。标准部分, 前面的更常用,这种仅作为 了解。还是计算过程中保留两位有效数字 不符合。2、确定 旋转角 α 正负的右手定则。1、确定坐标系方向的右手定则。可相交,距离为 0。A: 右手拇指指向。小数点后两位,不符合。

weixin_46034116的博客 1243

机器学习 -- 信用卡评分模型 -- 互联网金融风控

互联网金融主要分为资金类和资产类。资金类主要是理财产品,吸储,主要指标是用户转化、留存和复投,重在客户运营。资产类主要是贷款,包括消费金融和现金贷,小额贷款属于此类,主要目的是用户转化,还款和风险控制,信用卡评分模型就属于风险控制。 信用评分作用是对贷款申请人(信用卡申请人)做风险评估分值的方法。 信用卡评分是以大量数据的统计结果为基础,根据客户提供的资料和历史数据对客户的信用进行评估,评分卡模型...

XiaoMaEr66的博客 2420

梵悟山之《观人赋》转载----及理论3.23解读

于抖音号--梵悟山--见一作品,甚为欢喜,转载此处!观人赋世有高人,不窥籍册,不问门楣,三息之间,洞见肺腑。非有通神之术,实乃心澄如镜,目明如炬。观人行止,察其神色,辨其气脉,识其根骨,此非玄虚之论,乃修心悟道之验也。古云:“心生于物,死于物,机在目。”目者,心之窗也,魂之显也。心之清浊,性之邪正,品之高下,皆现于双眸,无可隐匿。夫天地之间,人各有质,行各有态。入门之风,落座之姿,持杯之轻重,眼神之定浮,笑意之真浮,皆为心之声,气之形。风疾者心躁,风缓者心宁;

2501_92697833的博客 1578

华三(H3C)网络设备配置命令大全与学习指南

本文全面介绍 H3C 网络设备的配置命令,涵盖路由器、交换机、ACL、NAT、VTY、SSH、本地用户、日志、STP、防火墙、QoS 等模块,适合网络工程初学者与运维人员参考。

DreamCollector的博客 6565

新人与老人,新入职都要注意细节

新人与老人,新入职都要注意细节 By 韩宇斌 憋了好长时间,挤出了上一篇文章《该不该?该如何减少自找的加班?》。回过头来总结一下,时间和精力是客观因素,主观因素就是人的确有惰性的,据说有一些研究证明,养成一个习惯需要21天即可,同样当你一段时间内不做一件事情,习惯还会改变。 前些天,收到了参加51cto博客活动的奖品,老刘前辈(刘博)的新书《悟道:一位IT高管2...

weixin_34362875的博客 183

计算电磁学(三)有限差分方法

有限差分方法(FDM)是一种数值处理方法,通过将偏微分方程变换为一组代数方程,通过求解代数方程组来得到原边值问题的近似值。由于有限差分法非常简单,所以也特别的稳定高效。其中时域有限差分方法(FDTD)是电磁分析中的常用方法。在计算电磁学中,常用有限差分方法(finite difference equations)来替代微分方程。一个有限差分法通常包括三个步骤将求解域划分网格用有限差分方程逼近给定的微分方程求解在给定边界条件和初始状态下的方程常用的网格模型方阵斜方阵三角阵圆形阵。

CCC_B的博客 1639

ABAP Cloud 开发教程的文章目录

本教程涵盖 ABAP 云端 Client 处理、多租户架构、ABAP Cloud开发、动态编程优化、SQL语法改进等技术主题。最新版本1.0.0(更新至2025-12-12),包含197篇文章,重点文章包括《ABAP Client Handling与隔离机制》《ABAP Platform 2021泛型编程》《SAP BTP ABAP多租户应用开发》等,为开发者提供从基础到进阶的实战指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1805

程序报错心诀

程序开发中的各种报错并不能归为BUG,至少它们比BUG还要低一个等级。因为这个阶段你还没有写出真实可用的程序,开发又进行不下去了,着实郁闷。说到报错,其实就是七个字——"少了,多了,对不上"。控制台输出的报错日志99%的报错都是这三个原因造成的。

super2007的专栏 1211

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《Linux内核修炼之道》精华分享与讨论(17)——子系统的初始化:以PCI子系统为例...

推荐博文:Linux内核“问题门”——学习问题、经验集锦 推荐下载:《Linux内核修炼之道》精华版之方法论 由Kconfig这张地图的分布来看,PCI这块儿的代码应该分布在两个地方,drivers/pci和arch/i386/pci,两岸三地都属于一个中国,不管是drivers/pci那儿的,还是arch/i386/pci那儿的,也都只属于一个PCI子系统,本着一个中国的原则,咱们要统筹...

dato0123 111

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

那年,我学习《Linux内核修炼之道》——子系统的初始化:以PCI子系统为例

这些文章是阅读《linux内核修炼之道》的笔记和一些自己补充的知识和感悟,写的不清楚的地方请查看《linux内核修炼之道》等资料。同时文章若有不妥的地方请大家指出,谢谢。 转载请注明出处:http://blog.youkuaiyun.com/muge0913/article/details/7252115 由Kconfig这张地图的分布来看,PCI这块儿的代码应该分布在两个地方,drivers/p...

yuanjinxiu 117

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

虹剑集诗词录存

虹剑集 诗词录存。

d3y1`5 81_09 242

著名书画家李适中草书赋

草书赋李适中伟哉书道,壮哉草书,高山仰止,穷词难赋。华夏五千年文明,书法三千年长河,文史奇葩,世界唯一。汉魏文兴,真草同诞,点划規矩真体,使转勾镮草篇。同树而分枝,歧用而各妍。真,循规蹈矩而端庄,草,自由舒情而浪漫。楷篆各体,不乏名篇,惟结体真正,点划不变。惜寡酒难醉兮水清茶淡,比草稍逊兮风标似浅,教学百日兮当可至用,延习千日兮可为大观。草书之妙兮大道无极,白首穷经兮不敢自满。群星闪耀兮谁曾绝顶,落笔无改兮绝无尽善。千年书史兮草圣几人?几卷遗迹兮神品璀璨。读旷世名帖兮放言草圣:誉寸笔无失兮地下汗颜。内涵如宇

x13944898008的博客 234
上一篇: 并发带来的问题——三种常见的读数据异常现象
下一篇: 如何理解两阶段封锁(Two-phase locking - 2PL)?
那海蓝蓝
那海蓝蓝 领域专家: 数据库技术领域 领域专家: 数据库技术领域 业界专家认证 业界专家认证
博客等级 码龄20年 568粉丝 425原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值