[文档]Facebook 海量数据处理

mikel阅读(888)

图片规模

作为世界上最大的 SNS 站点之一,Facebook 图片有多少? 65 亿张原始图片,每张图片存为 4-5 个不同尺寸,这样总计图片文件有 300 亿左右,总容量 540T,天! 峰值的时候每秒钟请求 47.5 万个图片 (当然多数通过 CDN) ,每周上传 1 亿张图片。

图片存储

前一段时间说 Facebook 服务器超过 10000 台,现在打开不止了吧,Facebook 融到的大把银子都用来买硬件了。图片是存储在 Netapp NAS上的,采用 NFS 方式。

图片写入

Facebook_write.png

尽管这么大的量,似乎图片写入并不是问题。如上图,是直接通过 NFS 写的。

图片读取

Facebook.png

CDN 和 Cachr 承担了大部分访问压力。尽管 Netapp 设备不便宜,但基本上不承担多大的访问压力,否则吃不消。CDN 针对 Profile 图象的命中率有 99.8%,普通图片也有 92% 的命中率。命中丢失的部分采由 Netapp 承担。

图中的 Cachr 这个组件,应该是用来消息通知(基于调整过的 evhttp的嘛),Memcached 作为后端存储。Web 图片服务器是 Lighttpd,用于 FHC (文件处理 Cache),后端也是 Memcached。Facebook 的 Memcached 服务器数量差不多世界上最大了,人家连 MYSQL 服务器还有两千台呢。

Haystacks –大海捞针

这么大的数据量如何进行索引? 如何快速定位文件? 这是通过 Haystacks 来做到的。Haystacks 是用户层抽象机制,简单的说就是把图片元数据的进行有效的存储管理。传统的方式可能是通过 DB 来做,Facebook 是通过文件系统来完成的。通过 GET / POST 进行读/写操作,应该说,这倒也是个比较有趣的思路,如果感兴趣的话,看一下 GET / POST 请求的方法或许能给我们点启发。

Facebook2.png

总体来看,Facebook 的图片处理还是采用成本偏高的方法来做的。技术含量貌似并不大。不清楚是否对图片作 Tweak,比如不影响图片质量的情况下减小图片尺寸。

[杂记]Vs2008将支持ASP.net MVC framework

mikel阅读(789)

下一版本的Vs2008将支持ASP.NET MVC,看来beta了这么长时间ASP.NET MVC框架终于要正式发布了,期待吧,原文转自:http://weblogs.asp.net/scottgu/archive/2008/06/01/asp-net-mvc-support-with-visual-web-developer-2008-express.aspx
Last week I blogged about the ASP.NET MVC Preview 3 release. One important thing I forgot to mention about this release is that you can now use it with both Visual Studio 2008 as well as the free Visual Web Developer 2008 Express edition.
The SP1 release of Visual Web Developer 2008 Express adds support for both class library projects as well as web application projects (previously only web site projects could be used with it). This new support is useful in itself, as well as in enabling both ASP.NET MVC and Silverlight project support with VWD Express. If you install the Visual Web Developer Express SP1 Beta you can start using ASP.NET MVC Preview 3 with it immediately.
Important: ASP.NET MVC Preview 3 does not require SP1 to be installed if you are using Visual Studio 2008. ASP.NET MVC Preview 3 will work with both VS 2008 and VS 2008 SP1 just fine.
You can learn more about the new VWD Express support for ASP.NET MVC from the VS Web Tools team blog here. This post also includes a free web download that provides ASP.NET MVC Test project support for NUnit-based unit tests. You can use these NUnit project templates with both Visual Studio 2008 as well as with Visual Web Developer Express 2008.
Hope this helps,
Scott

[视频]比尔.盖茨退休了

mikel阅读(1036)

微软董事长比尔·盖茨(Bill Gates)将于本周五(6月27日,美国当地时间)正式退出公司日常管理工作,以把精力专注于慈善事业.在过去30多年的职业生涯中,虽然盖茨曾与硅谷 IT名流们结下了诸多“恩怨情仇”,但在盖茨临别之际,众多硅谷知名人士仍忍不住主动向盖茨告别,并祝愿他今后在慈善事业上取得新成就.以下就是14名美国IT界知名人士致盖茨离别语(其中包括微软数名高管,排名不分先后,仅为方便阅读):
1、斯科特·麦克尼利(Scott McNealy),服务器制造商Sun董事长:
“我祝愿他今后的事业一帆风顺.我认为他聪明之极.好在他与我本人倒没有什么大冲突,但他确实取得了诸多成就.我觉得他今后的工作担子仍然很重.我愿意看到由他本人来管理盖茨基金会,而不是交给他人看管.我一直认为,对于事业成功的企业家来说,如果他们看到自己的财富被人任意挥霍一空,估计他们至死也不会安宁.”
在被问及是否会想念盖茨时,麦克尼利说:“如果我想念他,也不会有人因此给我点钱用;不过我倒是拿不准他是否会想念我.”
2、史蒂夫·乔布斯(Steve Jobs),苹果首席执行官:
“对微软来说,盖茨引退是一件大事.作为引人注目的退休事件,我个人认为,盖茨此前作出了巨大贡献,他理应受到人们的尊敬.”
3、迈克尔·戴尔(Michael Dell),PC制造商戴尔创始人兼首席执行官:
“在推动标准化计算和新一轮生产力事宜上,盖茨独特的创新能力和远见成为了关键因素.我个人认为,在促使计算机深入到人们日常生活过程中,我们很难找到比盖茨影响力更大的人.”
“对于盖茨的敬业精神,我个人一直非常钦佩.正是盖茨使企业家个人形象更有亲和力.他不仅是一名技术梦想家,同时也是一位商业战略家.多年以来,盖茨向我们展示了他的执着精神,并推动了包括技术创新、公开政策等因素在内的IT产业发展进程.”
“盖茨是屈指可数且已经改变了世界的IT业界领袖之一,正是他使得技术得以普及,从而使这些技术能够被更多人使用.目前我们之所以能开发出改变业界形势的新技术,部分就要归功于盖茨及其微软团队已经建立的良好基础.”
“我个人认为,盖茨最具持续性的贡献无疑将是盖茨基金会.比尔和梅琳达给予了我们诸多人生启示,他们投入大量精力和拿出上亿美元,目的是为了解决全球正面临的最棘手难题.”
“我认为,盖茨仍将一如既往地投入工作.如果非要说有什么不同,那只能说盖茨将把多年投入微软的精力转移到盖茨基金会中,并将更加努力地工作.我们将对此随时加以关注.”
4、马克·库班(Mark Cuban),HDNet和达拉斯小牛队老板,Broadcast.com前首席执行官:
“毫无疑问,盖茨的从业生涯谱写了自己人生传奇,他对世界的巨大影响,其实远高于人们的想像.尽管盖茨留下了许多精彩的故事,但是我最喜爱的那一个,可能连盖茨也不知道.而我自己也曾参与其中.”
“上个世纪80年代初期,Comdex不但为业界会议,而且还是科技人士的休闲聚会活动.在当时举行的一次聚会期间,我正在和几位女孩跳舞.这时她们的一个朋友突然跑来说,得马上离开,去见一位名叫比尔·盖茨的家伙,而他的个人财富高达6000万美元.”
“这是个真实的故事.盖茨,谢谢你给了我努力工作的动机.”
5、米歇尔·柯兹曼(Mitchell Kertzman),Hummer Winblad公司风险投资家:
“我个人猜想,在相对遥远的未来,即使已经没有人记得盖茨本人,及他在微软的角色,所有人仍然会知道盖茨基金会,并了解该基金会对世界所作出的巨大贡献.”
“如果盖茨能够在基金会中投入同样多精力、决心和执着精神,那么他将成为历史上最伟大、永远被人想念的英雄人物之一.盖茨的慈善工作是一个全新领域,我们都将支持盖茨战胜他的新'竞争者'——疾病、愚昧和贫困.”
6、菲利普·卡恩(Philippe Kahn),FullPower科技公司首席执行官,Borland软件公司创始人:
“尽管美国IT产业正由PC时代向苹果iPhone手机和Google时代转变,但盖茨为我们留下了历久弥新的精神财富.”
7、比尔·维特(Bill Veghte),微软在线服务和Windows商务集团高级副总裁:
“我从盖茨身上学到很多有益的东西,而树立雄心壮志是其关键.在这个问题上,盖茨将这样说:'当你考虑某一个问题时,千万不要从数百万的级别去考虑它,而是应该从数亿的级别去考虑.'”
“其次,我认为非常重要、非常有启发意义的一点是:很多人在一生中获得了大量钱财、权力,亦或是在政治和体育领域取得巨大成就.但是对他们来说,这些钱财和权力是否腐蚀了他们的灵魂?”
“有一次,我们曾经开会讨论搜索业务,参与者只有盖茨、我本人以及少数微软高管.在会议过程中,盖茨像我们一样充满热情,他能全面考虑到所有问题.实际上,他本来根本没有必要参加这一会议.”
“要说盖茨对我最有启发的一点是,即使他已经做了很多工作,他的追求、热忱和乐观精神却从未消退过.他支配自己精力、钱财和技能的独特方式值得我们学习.”
8、乔治·科朗尼(George Colony),知名市场研究公司Forrester Research首席执行官:
科朗尼在一则博客中表示:“所谓'建设性垄断'观念,应当是盖茨留给我们的最重要遗产.他并不是技术创新者.以客气点的方式来说,我们可将他称作技术'推广者';如果用不客气的方式,那他就是技术'剽窃者'.盖茨是一个商业模式创新者,但称不上技术创新者.”
“回首过去,盖茨'建设性垄断'看法与发明家托马斯·爱迪生的观念相类似.两者都通过多种方式创造出优秀技术,并使这些新技术能被更多用户使用.尼科拉· 泰斯拉(Nikola Tesla,美国发明家)和史蒂夫·乔布斯(Steve Jobs,苹果首席执行官)则可视为同一枚硬币的反面.”
9、罗伯特·迈特卡尔夫(Robert Metcalfe),以太网发明者,网络设备制造商3COM创始人:
“盖茨是个了不起的人.他非常聪明.尽管我曾经激烈地批评过他,但盖茨并不是一个恶魔.我所发表的第一篇专栏文章,就是批评微软的垄断行为.文章当时发表在美国《计算机世界》(Computer World)杂志上.我也因此开始了自己的记者生涯,时间是1991年2月25日.”
“我当时所主持的专栏名为《观点》,而文章标题为《微软是否在滥用自己的权力?》.在此之后,我对微软的垄断问题提出了尖锐批评,因为早在1991年时,我就发现了微软的垄断行为.微软当时推出了Pen Windows产品,目的就是挤垮Go公司.”
“但无论如何,盖茨仍然身如天神.如果注定有人要成为全球首富,那么盖茨无疑是最佳人选.”
10、丹·布里克林(Dan Bricklin),VisiCalc开发者,Software Garden和Trellix创始人兼总裁:
“他对于业界许多事物都具有极大参与勇气.只要是科技活动,他就会前来,并当众展示自己才能.如果你并不是绝顶高手,却执意要在众目睽睽之下显山露水,这的确需要勇气.但盖茨却成功做到了这点.他做了大量对微软来说必须参与的工作.盖茨愿意成为软件产业面向其他领域的代言人,这让我感到非常钦佩.”
“至今我还记得,我曾经参加过一次微软会议.这一会议似乎是关于Pen计算机技术,他们邀请了很多与会者.会议最后在盖茨家中结束,我们可以在盖茨家中自由穿梭……如果换了我,打死我也不会这样做.”
“盖茨愿意为自己所处领域贡献力量,这足以令人印象深刻.此外,盖茨工作十分努力,能够把握自己所做的工作,并把自己所得返还给社会,这为他人树立了优秀榜样.我很高兴盖茨做到这一点,我祝愿他天天心情愉快.”
11、史蒂夫·鲍尔默(Steve Ballmer),微软首席执行官:
鲍尔默在接受美国《新闻周刊》采访时表示:“他不仅仅是比尔·盖茨,他是与众不同的比尔·盖茨.他创建了微软,积累了财富,组建了基金会,并获得了声誉.其他人很难取得他这样的成就.”
“此外,与公司所有技术人员一样,盖茨也在实践中不断成长.盖茨记忆力比我所知的任何人都好.盖茨能涉及如此广阔的领域,像他这样的人我们今后恐怕很难再碰到.”
12、克雷格·穆迪(Craig Mundie),微软研究与策略首席主管:
“在我加盟微软时,所做的一切工作其实都与PC无关.我还记得与盖茨的谈话.他当时表示,'如果我们能够弄明白如何为这些东西编程,那我们肯定能从中赚钱.'这就体现了他的远见卓识,他敢于为自己的直觉下大赌注.”
“我认为,微软到目前所取得的巨大成就,其实都是基于盖茨从长期发展所下的大赌注.自我加盟微软后,就一直能体会盖茨在应对这些新领域时的独特思考方法.”
“我信奉'疑人不用,用人不疑'的准则.作为一名企业家,我相信人才是最重要的因素,你需要找到有用人才.”
“我曾经与内森·麦沃尔德(Nathan Myhrvold,微软前首席技术官)有过接触,也曾与盖茨打过交道.我发现,在关于如何通过技术帮助他人事宜上,我们有着一样的热情.”
“我曾经负责超级计算业务.很多人认为我应当放弃该职位,而去做汽车、电视机或是手表什么的.不过,当时我认为我们将会看到水滴效应,即我们将受到计算机处理速度、摩尔定律以及其他因素的限制.”
“当我与盖茨、麦沃尔德谈及这一看法时,我发现我们是'英雄所见略同'.我们认为,应当为此找到答案,但答案不会自己从天上掉下来.这也我是加入微软的原因.因此我加盟微软,成为当时并不存在的非PC计算部门总经理.”
13、米奇·卡波尔(Mitch Kapor),Lotus创始人,Mozilla基金会会长:
“我记得在Lotus创建之前,曾经与盖茨见过面.有人当时在与微软谈一项交易,盖茨这时驾驶一辆跑车高速行驶而来,他参加会议已经迟到,澡也没洗……这也是他性格中最引人注目的地方.”
“盖茨将自己在技术和商业上的卓越才能进行结合,从而感受到PC软件和硬件的发展趋势.他也因此建立了规模庞大的市场业务.”
“微软一旦认定目标,就能持之以恒加以执行,这当然是他们的优点.但往不好的地方说,那就是微软市场模式不利于正常市场竞争,而那种'不惜万难以争取胜利'的信条,将使大家日子都不好过.”
14、比尔·坎贝尔(Bill Campbell),财务软件开发商Intuit董事长:
“企业家都具备承受风险的素质,盖茨也不例外.在其30多的企业家生涯中,他展示了作为企业家应具有的精神和创新性才能.他改变了全球软件产业格局,并通过辛勤工作而创建了微软这一知名品牌,我对此感到由衷钦佩.

Flash动画

[框架]Flex开源框架OpenFlux

mikel阅读(1043)

作者 Jon Rose译者 张龙
该项目的贡献者Ryan Campbell讨论了标准的Flex组件和OpenFlux组件的区别

OpenFlux组件和现在的Flex组件大体的区别是前者将逻辑分离到MVC架构中了。这使你能在保持其他部分功能不变的情况下,轻松的替换组件的一部分。List组件更进一步,它还分离了布局逻辑,这样你就能轻松地使用新的布局来呈现列表条目了。

在今年初Ben Stucki宣布该项目发布的帖子中,他详细论述了构建OpenFlux的动机:

OpenFlux真正的目的是在你的项目中进行定制。使用一个无视图组件的系统意味着你可以快速轻松地 创建大量新颖有趣的组件而不必担心会破坏组件的其他部分。还记得过去在Accordian、TabNavigator或List组件上使用的小把戏吗?我 当然记得,这就是创建它的原因。答案并不是保护所有东西而是创建一个更棒的组件模型!

如果你想进一步学习OpenFlux,InsideRIA上有一篇很好的文章谈到了如何上手该框架。theflexshow.com上还发布了今年初采访Ben Stucki的一段音频

[教程]ActionScript3设计模式图

mikel阅读(790)

1. Factory(工厂)模式

2. Singleton(单例)模式

3. Decorator(装饰)模式

4. Adapter(适配器)模式

5. Composite(组合)模式

1. Command(命令)模式

2. Observer(观察者)模式

3. Template(模板)模式

4. State(状态)模式

5. Strategy(策略)模式

6. MVC模式

[资源]J2ME开发框架集锦

mikel阅读(726)

文章出处:
http://wuhua.3geye.net
保留版权,转载请注明来处,谢谢。

EasyMF 简易J2ME开发框架
 目标: 设计一个简单,稳定,可快速开发的J2ME开发框架。
一.说明:
   1. 此框架的意图是解决手机软件开发中常遇到,并且可以通用话的问题。
   2. 旨在提高无线应用程序的开发效率
二.EasyMF 能做什么
   1. 简化UI设计
   2. RMS的简化操作
   3. 简单的日志框架
   4. 简单的联网框架
   5. 通用工具的设计
   6. 一些图形相关的特效
三.EasyMF 的功能列表
   1. UI 框架
   2. 日志框架
   3. RMS框架
   4. 通用工具框架
   5. 图形相关
   6. 一堆有用的DEMO
官方主页:http://www.3geye.net
官方论坛:http://www.3geye.net/bbs
官方博客:http://wuhua.3geye.net
到这里提交bugfix:http://www.3geye.net/bbs/forum-56-1.html
到这里提交需求:http://www.3geye.net/bbs/forum-56-1.html
查看相关相关案例:http://www.3geye.net/bbs/forum-56-1.html
j4me
J4ME is a library for quickly building professional J2ME applications.
J4ME 是 一个开始开发专业的J2ME应用程序类库
最新版本是1.03. 在2008 5月更新的。最近一直没有更新
项目主页:http://code.google.com/p/j4me/
相关讨论:http://wuhua.3geye.net

 

贴图

 

采用EasyMF设计的产品有 GTalk 用EasyMF实现

http://code.google.com/p/gtalk-easymf/

 

MWT

Micro Window Toolkit(MWT)是一个用于开发J2ME 用户界面(UI)的工具包。它具有友好,强大,快速,开源 等特性。因为它的"灵感"来自 AWT,Swing和SWT。可以使用bitmap fonts等来自定义组件。它专门为嵌入式开发而设计和优化。基于LGPL发布。
K[Lr%sRI3 项目地址:http://j2me-mwt.sourceforge.net/


V4TD6Y.n3?h*H3

1 – J2ME Desktop:
Download theJad andJar or view it withJava WebStart

$? i6_7iPGl3U~3

2 – ELP ~ RPG:
Download theJad andJar or view it withJava WebStart

JZCQYxT3

3 – Progress Bar:
Download theJad andJar or view it withJava WebStart

3GEYEV/[+_Q?"D[ N6i

4 – Messenger Interface:
Download theJad andJar or view it withJava WebStart

J4ME-开源的UI Logger 项目

J4ME 是一个J2ME应用程序开发包。它包括一个UI框架,一个日记框架用于帮助调试因不同品牌手机 的差异而产生的问题,一个蓝牙GPS框架让你能够利 用JSR-179 Location API接口从蓝牙GPS设备获取定位信息和一个Java类包其中包含了J2ME中没有的方法比如双精度型数字的计算等。
a7Oi6k^Z u3 ui.gif logging.gif gps.gif

OpenBaseMovil

3GEYE6ct|I\
BaseMovil是一个J2ME应用程序开发框架。它由多个比较独立类库组成包括:3GEYEJsTH$m"V,m a+y0|K
OpenBaseMovil-core:整个框架的底层基础 类库,它主要提供国际化 支持、任务控制、加密、压缩、浮点支持、properties文件支持、一个MVC框架、一个事件框架。3GEYEXO3L0@C$z M8E
OpenBaseMovil-db:一个关系型数据库 引擎,其中一个表格存储的数据可上千。3GEYE1] m$?/vE|1@
OpenBaseMovil-script:一个脚本 引擎。3GEYE2\G:rVA7Ez
OpenBaseMovil-ui:一个UI工具包。
C,h~%O2B|3 这个几类库都能够完全集成在一起使用。3GEYEotaZ5J
OpenBaseMovil.jpg
+m'^1V[1L&Q7L3 http://www.openbasemovil.org/

J2ME 游戏 脚本引擎/J2me game script engine

一个非常小的script脚本引擎,可以同时在j2me / j2se / c++ platform上面运行3GEYELBXR[-CR
它的目标是使用这个脚本引擎便于开发一个更加灵活的j2me 游戏。
(FQ(wY$\N�{ PsW3 这个脚本有点像BASIC

这东西不错,是一个开源的脚本引擎,大家可以学习里面的思想3GEYE-v r.Ps!_+da[
里面其中带了一个例子,是3子棋。感觉挺不错的。这东西在SF也挺活跃的。

http://sourceforge.net/projects/j2megamescript/

例子图片3_200710301619291.jpg

Y!Go

Y!Go这是一个Yahoo Messenger J2ME客户端。

http://ygo.sourceforge.net/

EBookME

EBookME是一个用于把导入的文本文件 (HTML,DOC,PDF,…)生成J2ME电子书籍格式(JAD,JAR)的Java程序。生成的电子书 籍可以在支持MIDP1.0的手机上阅读。

http://ebookme.sourceforge.net/

jMobileCore

jMobileCore 包是一个强大的工具用来开发J2ME应用程序.jMobileCore提供支持开发简洁的,基于Canvas的图形 用户接口,快速地数据访问,可靠地通 信,简化多线程midlet应用程序。jMobileCore包可工作在任何支持J2ME (MIDP1.0 和CLDC1.0)的移动电话与PDA设备.

http://jmobilecore.sourceforge.net/

还有超级经典的J2ME-POLISH

http://www.j2mepolish.org

J2ME Polish 2.0

J2ME Polish 2.0 Release Candidate is here!

design example 1

design example 2

design example 3

[教程]flash中创建ActionScript3组件教程

mikel阅读(769)

Get an overview of Flash components, from setting up layers and frames in a component movie clip symbol to implementing Live Preview, dispatching events, and deploying a component to the Components panel.

[教程]人工神经网络入门(4) —— AForge.Net简介

mikel阅读(846)

范例程序下载:http://www.cnblogs.com/Files/gpcuster/ANN3.rar
如果您有疑问,可以先参考 FAQ
如果您未找到满意的答案,可以在下面留言:)
0 目录
人工神经网络入门(1 —— 单层人工神经网络应用示
人工神经网络入门(2 —— 人工神经基本概念介绍
人工神经网络入门(3 —— 多层人工神经网络应用示例
人工神经网络入门(4 —— AForge.Net简介
1 介绍
这篇文章中,我们将介绍一个用C#实现的框架AForge,利用这个框架,您可以方便地操作人工网络,计算机视觉,机器学习,图像处理,遗传算法等
2
 神经网络设计部分框架介绍
在这里我要强调:这段代码写的非常漂亮,一种代码如诗的美感,让我神往。
这段代码位于AForge.Neuro名字空间中。

这个库文件由6个主要部分组成:

  • Neuron所有神经元(neurons)的抽象基类, 它封装了所有neuron所共有的一些基本元素:权值, 输出值和输入值. 其他的neuron都是在该基础之上派生出来的.
  • Layer代表neurons的集合. 这个抽象基类封装了层(Layer的共性.
  • Network代表一个神经网络, neuron's layers的集合. 这个抽象基类提供了Network的共性.其他的Network都是在该基础之上派生出来的.
  • IActivationFunction激活函数(activation function)的接口. 所有的激活函数都派生于该接口
  • IUnsupervisedLearning无导师学习(unsupervised learning)算法的接口这种类型的学习体系在学习的过程中只提供输入,不提供针对该输入的期望输出. 该体系的目标是不断找出更优的解.
  • ISupervisedLearning有导师学习(supervised learning)算法的接口  – 这种类型的学习体系在学习的过程中提供输入和针对该输入的期望输出. 该体系的目标就是通过实际的输出和期望的输出来不断修正网络.

这些类的关系可以用下图来表示:

这个文件包含下面2中神经网络体系:

  • Activation Network
  • Distance Network

同时提供以下5种学习算法用于解决不同的问题:

  • Perceptron Learning 
  • Delta Rule Learning
  • Back Propagation Learning 
  • SOM Learning
  • Elastic Network Learning 

3 代码示例
范例程序下载:http://www.cnblogs.com/Files/gpcuster/ANN3.rar

该程序的使用说明和人工神经网络入门(1 —— 单层人工神经网络应用示例类似,可以参考http://www.cnblogs.com/gpcuster/archive/2008/05/22/1204456.html但是是使用的AForge.Net中的框架实现。

拿求AND运算的例子来说,代码如下:

ActivationNetwork network = new ActivationNetwork(new ThresholdFunction(), 21);
PerceptronLearning teacher 
= new PerceptronLearning(network);

            
double[][] input = new double[4][];
            
double[][] output = new double[4][];

            input[
0= new double[] 00 };
            output[
0= new double[] 0 };
            input[
1= new double[] 01 };
            output[
1= new double[] 0 };
            input[
2= new double[] 10 };
            output[
2= new double[] 0 };
            input[
3= new double[] 11 };
            output[
3= new double[] 1 };

            
double error = 1.0;

            
while (error > 0.001)
            
{
                error 
= teacher.RunEpoch(input, output);
            }

4 进一步学习

您可以查看类库的源代码,同时参考这篇文章《Neural Network On C#

5 预告
我们将利用本章介绍的框架解决一个实际的问题:)

6 总结

在这一章中,我们介绍了一个ANN库,通过它,你可以非常方便地建立你自己的神经网络,但是前提你得了解解决问题该需要使用哪种类型的网络,同时配合使用什么样的学习算法。

[教程]人工神经网络入门(2) —— 多层人工神经网络应用示例

mikel阅读(782)

范例程序下载:http://www.cnblogs.com/Files/gpcuster/ANN2.rar
如果您有疑问,可以先参考 FAQ
如果您未找到满意的答案,可以在下面留言:)
1 介绍
求异或(XOR)操作是计算机中常用到的一种计算:
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
我们可以使用第一篇文章中的代码来计算这个结果http://www.cnblogs.com/Files/gpcuster/ANN1.rar(需要修改其中的训练集),可以发现学习后的结果不能让我们满意,原因是单层神经网络学习能力有限,需要使用更加复杂的网络来学习。
在这一篇文章中,我们将使用一个新的多层神经网络来学习。
2 范例程序的使用和说明
该程序的使用说明和人工神经网络入门(1) —— 单层人工神经网络应用示例类似,可以参考http://www.cnblogs.com/gpcuster/archive/2008/05/22/1204456.html
但是多了一个计算操作(XOR),如图:

3 网络结构
该多层神经网络在单层神经网络的基础上增加了一层“隐藏层”(Hidden)

4 学习算法
基本的原理就是用实际网络计算出来的值和期望的值进行比较,然后来调整自己的权值。

        /// <summary>
        
/// 根据期望的输出和实际的输出来调整权值
        
/// </summary>
        
/// <param name="targOut">期望的输出</param>

        private void train_network(double[] outputs)
        
{
            
//get momentum values (delta values from last pass)
            double[] delta_hidden = new double[_nn.NumberOfHidden + 1];
            
double[] delta_outputs = new double[_nn.NumberOfOutputs];

            
// Get the delta value for the output layer
            for (int i = 0; i < _nn.NumberOfOutputs; i++)
            
{
                delta_outputs[i] 
=
                    _nn.Outputs[i] 
* (1.0  _nn.Outputs[i]) * (outputs[i]  _nn.Outputs[i]);
            }


            
// Get the delta value for the hidden layer
            for (int i = 0; i < _nn.NumberOfHidden + 1; i++)
            
{
                
double error = 0.0;
                
for (int j = 0; j < _nn.NumberOfOutputs; j++)
                
{
                    error 
+= _nn.HiddenToOutputWeights[i, j] * delta_outputs[j];
                }

                delta_hidden[i] 
= _nn.Hidden[i] * (1.0  _nn.Hidden[i]) * error;
            }

            
// Now update the weights between hidden & output layer
            for (int i = 0; i < _nn.NumberOfOutputs; i++)
            
{
                
for (int j = 0; j < _nn.NumberOfHidden + 1; j++)
                
{
                    
//use momentum (delta values from last pass), 
                    
//to ensure moved in correct direction
                    _nn.HiddenToOutputWeights[j, i] += _nn.LearningRate * delta_outputs[i] * _nn.Hidden[j];
                }

            }

            
// Now update the weights between input & hidden layer
            for (int i = 0; i < _nn.NumberOfHidden; i++)
            
{
                
for (int j = 0; j < _nn.NumberOfInputs + 1; j++)
                
{
                    
//use momentum (delta values from last pass), 
                    
//to ensure moved in correct direction
                    _nn.InputToHiddenWeights[j, i] += _nn.LearningRate * delta_hidden[i] * _nn.Inputs[j];
                }

            }

        }

5 预告
在下一篇文章中,我将介绍一个C#实现的ANN框架:)
6 总结
这个多层神经网络也可以准确地计算AND和OR运算,但是精确度却比不上第一个例子。
不同的网络对不同的情况都有不同的适应程度,这就需要深层的理论支持了,也不是我能为大家解决的啦:(