开发人员的人品问题

易测-阿里开发的移动软件测试工具 易测-阿里开发的移动软件测试工具。此版为2.2.4版本,下载后安装到手机即可使用,部分功能需要root。可结合PC端进行实时性能观测。 很方便哒 立即下载

程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题。当遇到奇怪的问题时,我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后,最终还是发现自己的代码存在人品问题。只有极少数的情况才是系统的问题。

同样,一些程序员在职业发展中遇到问题时,也总是喜欢怀疑公司不好,怀疑战略有问题,怀疑流程制度不合理,怀疑老板和同事……就是不愿意怀疑自己的人品。

在大大小小的IT企业中,总能看到一些技术并非最顶尖的程序员做成大事的例子,也总看到一些技术牛人被埋没而不能一展才华的现象。我想,除了机遇之外,还有一个很重要的因素,那就是:程序员的人品问题!

当然,这所说的“人品”,依然是调侃的说法,并非指道德问题。其实,人品问题指的是程序员的软实力。如果将程序员的编程技能称为硬实力,那么编程技能之外的东西统统可以称为软实力。不容置疑,编程技能是一个优秀程序员必须具有的硬实力,对程序员的职业发展起着最直接的作用,但程序员的软实力同样不可忽视。

如何修炼自己的人品呢?我想谈谈自己的一些经验和教训。

 


 

程序员相轻

在长期与程序员打交道的过程中,发现大多数程序员和我一样,喜欢以自我为中心,特别是年轻的程序员。也许我的观察可能不完全正确,但从许多程序员的言谈举止中,确实可以感受到我曾经的浮躁心态。

喜欢以自我为中心的人,往往会自以为是,并按自己的思路和想法行事,不太愿意听取别人的想法和意见。同时,这样的人,性格相对内向,喜欢沉浸在自恋和自负的虚幻空间里,其他人的思想都看不上。当两个都很自我的程序员相遇时,他们不是互相倾听和学习对方的优点,而更喜欢找对方的缺点,从而显摆自己的优势。这就是所谓“程序员相轻”现象!

不知道各位程序员是否存在程序员相轻的心态,反正以前的我经常看不起别的程序员,甚至还看不起那些德高望重的老前辈。能被我欣赏的程序员更是寥寥无几。同事编写的代码在我眼里就是小儿科,或者干脆就是垃圾。我认识许多过来的程序员,那些曾经很自我,但现已放下,从而潇洒编程的程序员。他们现在都在一些公司的团队里担当重要角色,但据他们反映,“程序员相轻”的现象在IT企业里是普遍存在的。

现在的软件开发,大都需要团队协同来完成的。团队作战是需要团队每一个程序员相互信任和尊重,将分散的力聚在一起形成合力,从而攻克一个又一个的项目工程。如果一个团队中的程序员相轻现象严重,团队中的成员就会从相互争论演变成相互指责,逐渐失去成员间的相互信任和尊重,内耗日渐严重。最终,团队的力量就四分五裂,大家并不向同一个方向使力,整个团队将变得毫无战斗力。

我想,对于程序员的职业发展来说,要过的第一个坎就是克服“程序员相轻”的心态。只有修正了这一人品问题,才能将自己的思想从狭隘封闭的自我空间中解放出来,才能踏上一条宽广的职业发展之路。那么,克服程序员相轻的心态很难吗?其实不难!很简单:放下自我!

世界上最难战胜的对手就是“自我”,而世界上最重的包袱也是“自我”。因为自我,人必自恋,心必自私,行必自负,荣必自欺,败必自卑。程序员相轻这一最大的人品问题,就是因为太自我。如果敢说“我的人品没问题”,那就得先放下自我。自我放下啦,人品问题也就放下啦。既然这样,我们何不将这沉重的包袱放下,让心灵轻松自由起来的呢?

 


 

沟通交流

大多数程序员是比较含蓄的。比起复杂的人际交往,我们更喜欢单纯的技术工作。因此,在与人交流的时候,程序员会表现出两方面的不适应:一是不善于倾听;二是不善于表达。其实,我以前也是这样。在听别人讲话时喜欢默不作声,而心里总盘算自己的思路。轮到我讲话的时候,却不能有效地表达自己的思想,讲的话很难让人理解。有时候,又喜欢打断别人讲话,将自己的观点强加于人,也不管是否听懂对方的意思,就大加指责,甚至出言不逊。

沟通交流障碍是大多数程序员普遍存在的另一个人品问题。而在团队协作中免不了相互沟通,如果一个程序员在沟通方面存在障碍,是很难融入团队开发工作的。因此,程序员应该努力提升自己的沟通能力,修炼沟通交流方面的人品。当然,提升自己的沟通能力,并不是要求我们练成辩论家的口才,只要能做到有效地倾听和有效地表达就已经足够了。

其实,做到有效的倾听还是比较容易的,特别是当对方的表达能力很强的时候,我们只需要静下心来认真倾听即可。即使不是很容易听懂别人的话,就多问问,请对方再讲讲。反正,一定要先理解别人的意思,才表达自己的意见。或许在你看来别人的想法是错的,不妨先让人家把话说完。没准等人家说完之后,你会发现原来自己错啦;即使自己没错,也能可能理解错了人家这样想的原委。理解是从倾听开始的,认真倾听体现了对人的尊重。设身处地想想,如果是你在发言时,是否希望人家都能认真倾听你的心声,理解你的思想呢?那么,在别人发言时,我们为什么就做不到认真倾听呢?

然而,倾听的目的是为了理解别人的想法。一些人默不作声,貌似在听人家讲话,实际上想着别的事情;而一些人却是不懂装懂,假装点头,让人家误以为听懂了。对于有效的沟通来说,这些现象不但没有好处,反而会带来更多坏处。问题得不到解决,隐患埋藏得更深。因此,倾听就要认真仔细的听,努力从讲述者的思绪去理解问题,真正理解别人的想法。懂就懂,不懂就不懂,千万别不懂装懂。不管你是菜鸟还是大牛,多问问,没人会瞧不起你!

相对来说,做到有效地表达会难些。很多程序员会有这种感觉,让我写代码容易,让我说出来就难。只可惜,代码是写给机器的,沟通交流面对的却是人。因此,提升语言表达能力也是非常重要的,除非你不打算与人打交道。

其实,在语言表达方面还是有一些简单的原则可以借鉴的。首先,要记住,不管怎样讲,要把握得住讲话的逻辑线索;其次,先讲背景,建立起沟通的上下文,再讲具体的细节;然后,在讲解中穿插关键词语的简短解释。相信这样讲解是可以让许多人理解的。这就好像编程,得有完整的逻辑主线,得有上下文,还得有变量定义,等等。

另外,在讲话时尽量少用指代词,就是少用“这个”、“那个”、“它”等词语。不妨直接说出这些指代词背后的真正名词,不过是多说几个字而已,但听者更容易准确地知道你指的什么。比如,你向别人请教时说“这个东西有问题,你知道原因吗”,人家一定会反问“什么东西”。但如果你说“Memcached命中率有问题,你知道什么原因吗”,人家就可以立即开始思考问题的原因啦。尽管在你的头脑里“这个东西”指的就是“Memcached命中率”,但人家并不清楚。这就好像编程时对变量命名一样,相信编程经验丰富的你基本上不用a、b、c这样的通用名字,一定会用bufferSize、totalAmount、lastChild等等让人一眼就能明白的单词。那么,既然你能在编程中可以养成良好的命名习惯,为什么不能在语言表达中也养成良好的命名习惯呢?

程序员如果把沟通交流的人品修炼好了,保证你的职业发展会驶上快车道。

 


 

协作能力

我以前喜以欢单打独斗。如果我不能掌控全部代码,我宁愿不做;或者动不动就把本该人家写的代码也写一份,搞得别人很没面子。后来我知道,就算我是千里码,日编千行,夜编八百,也很难独自完成现代的大型系统开发。在现代的软件企业里,协作能力也是对程序员人品的重要考验,我们应该努力提高在协作方面的人品。

首先,提高协作能力要善于分清责任和义务。其实,这个很简单,就是根据大家约定的分工做事情,该谁做的就由谁做,该谁担责任的就谁担责任。不要盲目做事,更不要随意插手人家的事情。程序员应该牢记自己的责任,切实履行自己承担的义务。只有这样,才能赢得同事们的尊重和信任。其实,对一个有战斗力的团队来说,不但需要忠实履行义务的成员,更需要敢于承担责任的成员!

其次,就是要随时了解和关心别人在做什么。我以前喜欢闷头做事情,守好自己的一亩三分地,其他的都不闻不问。这对于协作开发来说是非常不好的。在一个协作的团队中,不了解别人在做什么,自己的事情也肯定做不好。分清责任和义务,并不是说可以不了解和关心他人的事情,千万别为了分清责任和义务而走极端。

最后,就是做事要积极和灵活。在这一点上,可以说是仁者见仁,智者见智,修炼起来确实需要些悟性的。做事积极主动相对比较容易,看到团队的问题主动提出来,并从自我做起加以解决;对于没人承担或谁都不愿做的事情,试着去做做;自己取得了成果,主动与大家分享一下;别人的工作有了进展,多多鼓励和支持一下。不过,做事灵活就更不容易把握,这要求既能成事,又不失原则。这种人品只有在摸爬滚打中才能修炼出来,就看大家的悟性啦。

 


 

职业修养

毋庸置疑,程序员是一种职业。一些人是因为生存而选择了做程序员,一些人是因为兴趣爱好而选择了做程序员。可能大多数程序员和我一样,既是为了生存,也是喜欢编程,所以选择了做程序员。不管怎样,吃了程序员这碗饭,就得对得起程序员这一职业。既然程序员是一种职业,那就有职业化的要求。一名程序员是否具有职业化的修养,可能是企业老板最关注的人品指标。

职业化与专业化有很大不同。我们常常会称赞某人很专业,说的是这个人有某方面的专长。某方面的事情他是专家,他也很愿意去做那些事情。这叫着专业化。

职业化首先要求我们要有专业的技能,除此之外,还要求我们有职业的态度、职业的意识和职业的道德。工作中的事情,并不每一件都是你喜欢和擅长的,但你也得去做。简而言之,专业化就是“将喜欢的事情做得很好”,而职业化就是“将交给你的事情当作喜欢的事情,并将事情做好”!

我承认,和大多数程序员一样,我也想加入核心技术团队,也喜欢做创新性的工作,喜新厌旧,不想干编程中的体力活。但在一个企业里,不可能人人都参加核心技术开发,修建软件大厦总要有一些人会去做施工队,去干搬砖头的体力活。于是,当有工作交代下来的时候,如果不是我喜欢和擅长的,也只好硬着头皮去做,不情愿的牢骚只能暂时憋在心头。当然,既然接了这单子的买卖,也就想尽办法努力去做好,一来是要面子,二来是怕将来留下麻烦。多年下来,也逐渐在一些不喜欢和不擅长的工作中找到快乐和成就感。后来才明白,这就叫职业化。

另外,项目开发团队中最怕出现情绪化的程序员。尤其是在核心开发工作中,情绪化的程序员无疑就是整个项目的定时炸弹。尽管这样的程序员可能有着极高的专业化造诣,一旦项目客观要求发生变化,与其原来的喜好和理想不符的时候,他们就可能就会产生抵触情绪,甚至干脆撂挑子不干啦。其实,情绪化是不成熟的表现,更是缺乏基本的职业修养。想想自己过去也曾有过类似的表现,如今想来真是可笑啊。

其实,做到职业化也没那么难,只需要乐观的心态和那么一点点牺牲精神。既然工作和纳税一样是无法避免的,我们何不快乐面对工作。既然这件事情总得有人做,牺牲一下又何妨,权当行善嘛。当然,要做就得做好,得有那么一股劲。让我干体力活,我就权当锻炼,即使让我扫地,我也要比别人扫得干净!这样才能在工作中找到快乐和成就感。在职业生涯中,也许会失去某些东西,但也会得到某些东西。

有职业化修养的程序员在企业和团队里是值得信赖和让人放心的,将这样的人放到重要和核心的技术项目中将是项目成功的有力保障。因为,不管项目需求如何变化,不管技术方案如何调整,有职业化修养的程序员都会认真做好需要的每一件事情,这可以有效地保证企业和团队的整体利益和目标。因此,想要你的职业发展一帆风顺,一定要修炼职业化人品!

 


 

尾声

是否能认识到人品问题,关键看自己,是否打算修炼人品,关键也要看自己,外人是帮不了的。哲学家说,外因对事物发展的影响有限,而内因才是推动事物发展的根本因素。所以,如果程序员自己不愿意修炼自己的人品,无论外人如何苦口婆心都是没用的,反而会让他觉得你讨厌。

人必须要自己经历了一些事情,才会有切身的体会。面对问题,如果开始从自身找原因啦,也就是缘份的开始。当苦苦求索,而不得其解时,也就是机缘到啦。某一天,自己突然想明白啦,或者偶遇高人点化,心中突然豁然开朗,就是顿悟。顿悟之后才发觉原来一切都很简单,以前纯粹是自寻烦恼。程序员不就是那么回事儿嘛!从此,我们就可以轻松潇洒地做程序员啦。

但要记住,程序员还是程序员!别修炼了半天人品,修成了专家,成了辩论家,成了哲学家,成了思想家,就是不会编程啦。如果大家都得道成仙了,谁来干活呢?当然,因为你的道行高,大家希望把你供起来,但千万别自己把自己供起来。真的,程序员修炼人品,不是为了摆脱编程工作,而是为了找到编程的快乐。

有一位大和尚曾对我说:真正的快乐不在于你拥有多少,而在于你付出了多少!如果你将每一件事都当善事来做,心就会快乐。所以我想,行善从编程开始好啦……


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/myloveiscomealone/archive/2010/06/09/5658197.aspx

Skiplist,B,B+tree,LSM tree SkipList 理解(如何实现): 即使是有序的链表,查找的时间复杂度也是O(n),但链表不能随机访问所以不适用于二分查找,使得查找的时间复杂度为O(logn)。 于是将有序链表和二分查找结合得到了SkipList,类似于二叉搜索树,这是一种以空间换时间的算法,通过在每个节点中增加向前的指针,从而提升查找效率(如下图所示)。 一开始如a所示,是一个有序的链表,时间复杂度O(n)。随后建立了e所示的SkipList,从最顶层往下查找,可以跳过许多元素,减少查找次数。 ​ 阅读详情

相关推荐

Tartancalib标定OAK-FFC_4p(上)

1.使用Tartancalib标定双目或多目相机前,先对单个相机标定获得内参,再获得外参。

qq_51731421的博客 1276

阿里大佬带你详解 软件设计模式

内容提要: 本书从面向对象程序设计的7个基本原则出发,用浅显易懂、可视化的UML建模语言逐–介绍GoF的23种经典设计模式。全书共9章,内容包括设计模式基础、创建型模式(共5种)、结构型模式(共7种)、行为型模式(共11种)、设计模式实验指导。前8章每章包括教学目标、重点内容、小结和习题等内容,对各模式都介绍了模式的定义与特点、模式的结构与实现、模式的应用实例、模式的应用场景和模式的扩展。第9章...

如果频繁就私信一下呢 744

GIS应用技巧之三招搞定重叠区域数据提取

在很多分析过程中,常常需要分析判断哪些图形发生了重叠,该重叠情况的发生在对应分析环境下具有特定意义。例如在缓冲区分析中,若两个受灾点周边的受灾面积(即缓冲区)有所重叠,分析重叠区域的受灾影响时,就需要考虑相互影响的因素。本例中先用【要素转面】工具提取出发生重叠的区域,其次用【空间连接】工具将原始图层信息连接到重叠数据的图层,分析重叠数据的属性表,即可得到发生重叠的原始图层数据。 Step1 提取重叠区属数据。打开【数据管理工具】|【要素】|【要素转面】工具,输入要素设置为“circles”,输出要素类设置为

端木宛白的博客家园 6万+

程序员的人品问题:自我、情绪化与不善沟通

程序员的人品问题:自我、情绪化与不善沟通 时间:2010-06-11 08:47来源:《程序员》杂志作者:责任编辑   程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题。当遇到奇怪的问题时,我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后,最终还是发现自己的代码存在人品问题。只有极少数的情况才是系统...

abl7010的博客 418

2024秋招,腾讯测试与质量管理工程师一面

家人们,秋招都开奖了吗,拿到自己心仪的offer了吗,还是在准备明年的春招呢?今天我记录一下,之前面试腾讯测开的一面过程面试官人非常好,我回答中有问题的地方,及时帮我指正同时耐心回答我的反问只可惜我当时的能力不足以达到鹅厂的标准,遗憾错过。

chowley的博客 1056

数据结构——滑动窗口

入:下标为 i 的元素进入窗口,更新相关统计量。如果 i < k−1 则重复第一步更新:更新答案。一般是更新最大值 / 最小值出:下标为 i−k+1 的元素离开窗口,更新相关统计量✔1. 定长子串中元音的最大数目✔2. 找到一个数字的 K 美丽值✔4. 子数组的最大平均数 |方法一:前缀和方法二:滑动窗口7. 得到 K 个黑块的最少涂色次数8. 爱生气的书店老板9. 几乎唯一子数组的最大和10. 长度为 K 子数组中的最大和11. 可获得的最大点数12. 最少交换次数来组合所有的1 ||

qq_68915288的博客 762

开发者的人品问题

<br />程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题。当遇到奇怪的问题时,我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后,最终还是发现自己的代码存在人品问题。只有极少数的情况才是系统的问题。<br />同样,一些程序员在职业发展中遇到问题时,也总是喜欢怀疑公司不好,怀疑战略有问题,怀疑流程制度不合理,怀疑老板和同事……就是不愿意怀疑自己的人品。<br />在大大小小的IT企业中,总能看到一些技术并非最顶尖的程序员做成大事的例子,也总看到

liaojiafan的专栏 580

VS2022+Qt6保姆级配置指南:从插件安装到项目互通全流程(附常见错误解决)

本文提供了一份详细的Visual Studio 2022与Qt6集成开发环境配置指南。从插件安装、环境搭建到项目创建与互通,涵盖了全流程操作步骤,并针对常见的配置错误和调试问题提供了实用的解决方案,帮助开发者高效构建企业级桌面应用。

nginx7reverse的博客 1203

阿里oss maven配置_Nexus存储库管理器教程:OSS Maven工具入门

阿里oss maven配置 如果要进行软件开发,则很可能会部署到本地Maven存储库。 Nexus存储库管理器通常是比较受欢迎的选项之一,并且既有开源版本(Nexus OSS),又有付费支持版本(Nexus Pro),那么采用它实际上并没有任何障碍。 在此Nexus存储库管理器教程中,我们将演示如何下载Nexus,安装Nexus,启动Nexus管理控制台,甚至将Java JAR文件上传到Nex...

服务器编程交流平台 1752

YOLOv11改进 - C3k2融合 | C3k2融合CBSA 收缩 - 广播自注意力:轻量级设计实现高效特征压缩,优化处理效率 | NeurIPS 2025

本文介绍收缩 - 广播自注意力(CBSA)((Contract-and-Broadcast Self-Attention))机制,并将其集成到YOLOv11中。传统注意力机制存在黑盒难理解、计算复杂度高的问题,CBSA通过算法展开推导出本质上可解释且高效的注意力机制。它先从输入数据中选出少量代表性tokens,接着对代表进行收缩计算,再将结果广播给所有原始数据。该机制计算量线性增长,具有明确数学解释,还能统一多种注意力机制。我们将CBSA代码集成到YOLOv11的C3k2模块中。实验证明,改进后的YOLOv

魔改工程师的博客 850

35、使用 Geo 创建 GitLab 的分布式只读副本

本文详细介绍了如何使用GitLab Geo功能创建分布式只读副本,涵盖数据库主从配置、SSH密钥查找方式更改、通过Web UI添加从节点、激活哈希存储及状态检查等关键步骤。同时提供了常见问题解答和配置流程图,帮助用户快速部署并维护Geo集群,实现跨地域的高效数据同步与高可用架构。

chair的专栏 80

开发人员的人品问题 收藏

<br /><br />程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题。当遇到奇怪的问题时,我们总是喜欢怀疑系统、怀疑编译器、怀疑网络、怀疑硬件……就是不愿意怀疑自己的人品。熬过几个不眠之夜后,最终还是发现自己的代码存在人品问题。只有极少数的情况才是系统的问题。 <br />同样,一些程序员在职业发展中遇到问题时,也总是喜欢怀疑公司不好,怀疑战略有问题,怀疑流程制度不合理,怀疑老板和同事……就是不愿意怀疑自己的人品。 <br />在大大小小的IT企业中,总能看到一些技术并非最顶尖的程序员做成大事

hollyhock13的专栏 738

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

微信公共开发人员文档 阅读笔记

先上效果图: 作者博客:http://blog.youkuaiyun.com/stationxp 作者微博:http://weibo.com/liuhailong2008 转载请取得作者允许 一 基础篇 1、新手接入: http://mp.weixin.qq.com/wiki/index.php?title=接入指南须要注...

weixin_34122810的博客 220

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

IE9 媲美Firebug的强大的程序员开发工具

Javascript的调试,是开发Web应用尤其是AJAX应用很重要的一环,目前对Javascript进行调试的工具很多,比较突出的是Firebug。不过Microsoft推出的IE9中,也有一个很闪亮的程序员开发工具,它的强大程度简直可以和firebug媲美,为使用IE的Web开发人员提供了同样便捷的调试工具。 在安装IE9之后,先用IE9浏览器打开需要测试的页面,使用快捷键F12唤出程序...

raylinn的博客 224

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

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

Zend Studio中安装Aptana及几个配置说明

Zend Studio加Aptana的完美结合.我想,无论对于前端人员还是PHP开发人员,Zend Studio加Aptana绝对堪称经典.可惜中文资料太少,让很多人在安装和使用时绕了不少弯路,在此分享一下,安装过程中几个实用的技巧.Zend Studio的下载安装就不详叙了,自己Google下.本文以7.1版本为例说明.1. Aptana插件的安装Aptana插件的安装有两种方式,一种是通...

飞雁阁 141

关于文件透明加密解密

关于文件透明加密解密

fdgugfv的博客 3725

It从业人员的“职业道德”问题

昨天去市内某富的流油的公司修改一个简单的存储过程调整的问题,但是却让我花了10个小时的时间,而且是连续不断的10个小时,花了这么长时间的一个很重要的问题就是代码版本不一致:原来项目的开发人员把代码修改在了自己的笔记本,但没有提交到公司的VSS服务器。 因为这些事情,俺很不爽,所以写点东西来记录一下。 在我看来,职业道德就是人品问题,我提些疑问,各位看官看看自己有没有XX: 1,你离职...

sabolasi 1922

关于招聘的故事

招聘      今天是8月份了,新招聘的2006年的毕业生开始到岗工作了,在闲聊中知道他们中的很多同学已经失业了。不是因为自己当初选错了单位而炒了公司,就是因为种种原因被单位炒掉了,只好又开始了新一轮的招聘生活。想想也让人感慨颇多。说说我自己是如何招聘的,希望对大家有一些帮助。招聘者的目的。        这还用说吗。招聘工作人员就是让他来工作,然后榨取他的剩余价值,获得最大的利润。我想这

bbbian的专栏 2895

做一个有人品的程序员

写在前面:“难怪这帮程序员这样让人瞧不起!做的东西直接反映人品!” 前段时间与公司同事分享过一篇文章叫做《阿里软件资深架构师谈:开发者的人品问题》(http://www.programmer.com.cn/3373/ ),本来目的是引导程序员用心为用户写代码,结果没有起到任何可见的效果。以前开会我反复强调,以用户的角度和身份为用户写代码而不是理所当然的去...

weixin_34419321的博客 96

JAVA + js 实现 头像上传及裁剪功能

题记 我想大家对头像上传功能在陌生不过了把,每个人都应该用过,当然,从不更改头像的大侠除外,写到这里,我突然想到我的优快云用户也没有头像,于是,我到设置里面准备去看看优快云的头像上传功能是怎样的,可是我弄了半天都没搞定,提示说高版本浏览器不支持预览,难道只有IE6才支持?难得吐槽一下,不知道是我人品问题还是没用对。如图: 准备工作 好了,废话不多说了,一般常用的头像上传有

xixihahahj的专栏 1万+

还有多少组策略是不同步的?

Windows 的域管理恐怕越来越多地被应用到企业的管理当中,而且随着windows server内置的功能越来越多,越来越实用可靠,windows的域管理就越显得有效。 之前开发人员会遇到一个dll 炼狱之说,现在估计不...

congbin2766的博客 152

头像上传 裁剪 java_JAVA + js 实现 头像上传及裁剪功能

我想大家对头像上传功能在陌生不过了把,每个人都应该用过,当然,从不更改头像的大侠除外,写到这里,我突然想到我的优快云用户也没有头像,于是,我到设置里面准备去看看优快云的头像上传功能是怎样的,可是我弄了半天都没搞定,提示说高版本浏览器不支持预览,难道只有IE6才支持?难得吐槽一下,不知道是我人品问题还是没用对。如图: 准备工作好了,废话不多说了,一般常用的头像上传有两种(据我所知):普通的文件...

weixin_34987818的博客 523

软件使用小心得----VC6与office2010 的冲突

<br /><br />      前几天,因为自己电脑里面的word2003打开的时候总会报错,他们说是因为少了一个文件,我懒得去下了,就直接下载了一个office2010,结果用的我不亦乐乎呀...话说2010比2003好用多了(虽然大多数功能我都还没用过)...最大的好处,在于看得舒服(一看就高级多了)...但是就在我用得不亦乐乎的时候,我的VC6出问题了,打开我的cpp就会报错,错误还超级变态的那种...<br /><br />        这几天编程序的时候最怕遇到这种问题...结果连VC都出这

ruoxiaoshao的专栏 1844

读点CMMI (2)

实施   现在很多企业因某种原因想做CMMI了,大体做法   1、决定实施CMMI   2、EPG接受培训,理解CMMI   3、EPG根据自己理解的CMMI和实际情况开发一大堆漂漂亮亮的过程文档、流程图、表格、模板、检查单、作业指南。

Navy的专栏 657
上一篇: VC++ 动态链接库之VS2010版本
下一篇: Windows静态库和动态库的创建和使用【转】
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值