程序员需要避免的 10 个坏习惯

人形机器人五大核心零部件技术解析与国产化实况 人形机器人并非简单机械集成,而是物理、能量、感知、决策与执行五层系统毫秒级协同的复杂体。其性能瓶颈往往不在于整机算法,而深植于谐波减速器的刚度稳定性、无框力矩电机的功率密度与温升控制、六维力传感器的动态响应与温漂抑制、运动控制器的实时OS生态及灵巧手的多指协同精度等底层硬件能力。这些部件共同构成整机68.3%的成本,且国产化率差异显著——谐波减速器达72%,而高精度力矩传感器仍受制于日德厂商。本文聚焦‘谐波减速器’和‘六维力传感器’两大热词,从材料工艺、参数定义、失效模式到产线验证,揭示真正卡脖子的技术关卡 阅读详情

程序员因为长期坐在电脑前,所以身体方面多多少少会出一点问题。钱赚的多少倒无所谓,身体才是最重要,那么程序员如何在保持好身体的健康呢,一起来看看吧。

1. 休息不够

 

我敢肯定你们很多人或者说几乎所有人都对这个坏习惯感到十分罪恶。我也是,对没有休息或休息不够依然有罪恶感。曾有一段时间,我凌晨六点入睡,中午一点左右起来吃午饭,一直工作到第二天凌晨六七点。这简直太常见了,几乎每天都是如此。在工作任务紧急的时候,我做过许多可笑的事情。我想我们每个人面对DDL的时候都有过这样的情况,我要说的不是这种,而是你的日常习惯。

我建议你每天尽量多休息。我不能说那种具体而微的计划,因为每个人都不一样,但在一般意义上,你应该每小时都应该起身伸展四肢,活动一下,喝杯咖啡,吃点东西。很多时候,如果你思路停滞,那你需要休息一下,大脑得到休息有助于更容易地解决问题。所以找到适合你的休息方式。即使你认为自己不需要休息,但也试一下,你会发现自己的效率提高了不少。

2. 拒绝寻求帮助

这一条在学习和工作场景中都很常见。我们很多人都不寻求帮助。原因很多,但我认为最主要的原因无非是自尊以及害怕让人认为自己啥也不会。我们很多人都有冒名顶替综合征,觉得自己不完全胜任自己的工作。我在公司里、在和客户打交道时、甚至在上课和辅导中都有这种感觉。我们认为寻求帮助会强化这种感觉。但事实上,它浪费了大量时间,阻碍了你的成长。

其他真正的开发人员们都是视频或书籍一般的资源,甚至要比这些好太多。他们可以直接回答你的问题,帮助你真正的理解它。只有混蛋才会因为你问问题而批评你,这时候我会尽力避开这些人。如果你想要自己找到答案,不想寻求帮助,那也没问题,给自己一个时间限制。当你的前辈就在你旁边,他可能知道或至少可以帮到你的时候,千万不要浪费几天时间来寻找答案。3. 停止学习

我不管你是否是从业20余年的高级开发人员,你应该一直把自己当成一个学生。这比大多数职业的要求更高,因为这一行总在变化。没有一个开发人员可以知道所有事情的全部内容,他们这一分钟这样做,下一分钟就有变化发生,他们就必须学习更多。如果你骄傲自满,停止阅读、学习,你必然会落后。即便你有一份不需要学习任何新东西的工作,一旦你失去了那份工作(这并非不可能发生),你会远远落后。所以即使有这样的工作,我也建议你边工作边学习。

不管你喜欢那种语言、框架、库,你都要及时更新你的知识。如果你的职位需要的只是旧知识,这也是可理解的,因为很多领导倾向于认为如果公司还没没落,那就没必要修复。所以你仍然会发现有些团队用着过时的、不受支持的技术,只因为该技术还能运行。如果你边工作边学习这方面的新东西,那你就可以向团队展示更快、更高效、更简单的新技术是可能的。你或许能够说服他们更新技术、改善公司。

4. 混乱的代码

这一条更多地是一种技术习惯,但也可能意味着很多事情。你应当以一种直观、高效、安全的方式写代码。这在自学的时候简直太难了,因为在相关的课程中,你学到的不是写某些代码的最佳方法,而是导师认为这么写最容易理解一些核心概念。所以,你必须进行一些额外的研究,找出清理你代码的最佳方法。

我绝对建议你使用“避免重复代码原则”(DRY principle,don’t repeat yourself)。如果你遇到常见的代码块,那就创建某种“类”(class)或“函数”(function)来合并这部分功能,而不是仅仅重复它。这让代码更加简洁,节省了大量代码行,并且便于他人使用。你也要注意性能,比如压缩图片、缩小JavaScript和CSS。你可以使用task runner(如gulp)或其他工具自动完成压缩,面对小型任务,你甚至可以使用minifier.org等手动完成。另外,不要进行不必要的API接口调用,要使你的全栈应用程序以尽可能少的请求完成你需要的全部功能。以及测试……我在这上面犯了很多错,没有做足够的测试。就我所知,单元测试有助于搭建更健全的应用程序,避免潜在问题,节约时间和开销。但我就是很讨厌它,这可能是我最坏的习惯之一,也是我成为更好的开发人员需要解决的大问题。有时候我们回了节约时间减少测试,但在现实中,这样做会降低应用程序的性能、效率和可读性,而且与一开始就采用正确的方法相比,它可能在将来引起更大的麻烦。所以请记住这一点。5. 工作和生活的不平衡

工作和生活的平衡真的很重要,尤其是当我们成家以后。不管什么类型的程序员都要花大量的时间在工作上,这有很多原因:事情总在发生变化;我们遇到的问题让我们寸步难行;我们需要研究这些问题等等……这就导致了很多时候,我们不得不工作到很晚、很早就开始工作、周末也加班。这会让你远离生活中的一切,比如你爱的人们、你的个人爱好。你可能喜欢运动、远足或是在外吃大餐,但假如你一直要加班,你就没法做这些让你快乐的事情。

我在这个领域有很多经验。我和妻子有两个孩子,其中一个患有自闭症,但我没法像我想的那样花大量的时间陪他们。我面临着双重困境,因为我既要处理编码问题,又要处理内容创作者的问题,要不断地提出新想法,有质量地记录下来等等。

如果你是自由职业者,为自己工作,所有的生计都取决于完成工作,你只有把所有的事情做完才能拿到报酬。有报酬,也就必然得承受持续不断的担忧:自己是否能跟上进度、自己能否完成任务。压力真的很大,让我们不得不把其他事情从我们生活中挤走。并不是说在公司工作的人就不会经历这些,而是说当你需要考虑所有的事情的时候,压力等级完全不同。所以我很同情那些有自己生意的人。

但即便如此,你也不能让它控制你的生活,你必须为你的家人和朋友留出时间,或者更坦率地说,为你自己留出时间。生活可远比写几行代码丰富多了。做你自己喜欢的事情,给你的生活带来平衡。

6. 糟糕的办公室政治

这一条是给那些在公司工作的人们的。你和其他人一起工作,但这反过来又会引起冲突、分歧、争论等等。许多开发人员十分傲慢,总认为自己是正确的,即使他们知道自己犯了错,他们中的一些人也永远不会承认。我不是说这是大多数开发人员,但我认为我们至少会遇到一位这样的人。我听很多人说,他们的团队非常棒,成员之间相处得非常融洽,这很好,但不是所有团队都是这样子。

很多时候你们会在想法和解决方案上发生冲突,试着表现得老练和对对方的尊重,但同时,也不要太容易就被说服,尤其是当你对自己的提案非常有信心的时候。不要大喊大叫,不要骂人,千万别做这些事情,这什么用也没有。如果他们开始这样对待你,你就离开,做一个更强大的人。如果你不幸遇到了一个十足混蛋的团队成员,他完全不听理由,你除了想办法避开他之外,别无他法。在某些情况下,你可能不得不和你们的领导交谈,不过我还是建议你先和那个人谈谈。7. 不能从错误中吸取教训

作为一位开发人员,你会犯很多错误,这不可避免也没什么大不了的。但如果你总是犯同样的错误,不能从中吸取教训,那就有问题了。

当你犯错后,我建议你遵从这样一个流程:

找出错误的根本原因是什么;找到可以防止错误再次出现的流程;弄清楚如果早先发现了错误,能否避免后果。当你犯下大错,请你仔细思考一下这三件事,很有可能就不会再犯这个错误了,或者你至少下次会尽早发现错误,避免情况恶化。同时,不要因为犯错而对自己太苛刻,谁都会犯错。

8. 太早放弃

挫折是编程的重要环节。我制作了一些关于挫折及其应对的视频。我也见过很多人因为沮丧而在特定的项目和编程上过早言弃。一些项目确实特别难,似乎一旦你修复了一些bug,它就会导致另一个bug,bug复bug无穷尽也。你可能开始觉得自己处理不了,自己本可以去做别的,做这个就是浪费时间浪费生命浪费金钱……你开始产生很多消极的想法。如果你很快就放弃某个项目,或是很快辞职,那么拟投入到这个项目或工作中的一切都将化为泡影。

我并不是说你啥项目都不能放弃,只是我看过太多次人们在即将成功的前夜放弃了。所以在放弃之前,确保你试尽了所有可能:已经上下求索、寻求帮助、用遍方法、换个技术、休息很长一段时间让自己的思绪恢复正常、如果可能的话已经搁置了一段时间……你在放弃之前做了所有能做的事情,如果还是失败,那么也许是时候放弃它、继续前进了。成功可能就在眼前,如果你这时候放弃,真的太耻辱了。

9. 做一个无所不知的人

我之前提到过,我认为一些开发人员十分傲慢的原因是,他们认为自己无所不知。他们从不听其他人的意见,他们为啥要听呢?他们知道所有的答案。如果你周围全是这样的人,那真是糟透了,这对你也没好处,因为你也会认为自己无所不知,就会不积极学习、不改善自己。我敢打赌,总有一天你会被自己犯下的错误叫醒,这源于你不听取任何人的意见,也不自己进行调研。

这些人大多数都是Stack Overflow网站(一个IT技术问答网站)的魔鬼,他们取笑新开发人员的问题,嘲笑他人的回答,一有机会就点击“反对”。我讨厌死这些人了。我认为他们中的许多人在学校里就总是被人找茬,他们利用自己的知识欺负其他可能有问题或是没有所得的开发人员,看上去像是忘掉了被欺负的感受,只想要复仇。我这个理论可能有问题,只是一家之言。

无论他们出于什么原因这么做,我认为如果他们思想开放、欢迎不同的想法、尊重他人,那他们就会比总是想要“正确”的人快乐多了。他们可能是团队中最聪明的人,也是最糟糕的人,因为没人愿意和他们合作,无法进行良好的沟通。对于一个想要成功的团队来说,沟通和团结是必需的,而无所不知的人会破坏这些。所以,如果你是这样的人,试着别那么自负,开放一点,尊重一点,你会走得更远。

10. 不接受建设性批评

最后一条和上一条有点联系,不能接受建设性批评。无所不知的魔鬼和真心想要帮助你的人之间还是有很大区别的。有时你很难看清这个区别,因为别人指出你的错误或者不完善的地方,你可能感觉不是那么好,感觉自己受到他人的攻击。

但很多情况下不是这样的,这只是某个人想教给你一个更好地方法,或是分享自己的意见。作为内容生产者,我花了很久才学会分辨挑事者和好心人。一开始,有人谈论我如何做某事的时候,我都很有戒心。但我意识到,他们中的许多人只是在试图提供合理的帮助。如果他们并非不尊重,或者只是对一些无关紧要的事情挑三拣四,那我就需要把它当做对我和对我的知识有益的东西。建设性的批评是学习的绝佳资源,因为建设性的批评很有针对性,是你现有的问题,是他人给你的具体解决方案,这是无价的。事实上,代码审查简直太棒了,你可以得到其他人的建议,改进你的代码甚至是你自己。所以不要把这类事情都看成人身攻击,除非你真的受到了攻击,或是故意的取笑和不尊重。听进别人的批评或改进建议总是很难,但最终,这会让你成为一个更棒的开发者。

 

无论是新开发人员,还是经验丰富的老手,我都希望这些建议能够帮助到你们。

华为OD机试真题2026双机位C卷 Python&JS 实现【明日之星选举】 给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。 阅读详情

相关推荐

Mamba-YOLO训练前必看:从环境配置到数据集调整的完整流程

本文详细介绍了Mamba-YOLO目标检测框架的完整训练流程,包括环境配置、数据集优化和模型调参。从硬件准备到依赖安装,再到数据增强和超参数调整,提供了一系列实用技巧和常见问题解决方案,帮助开发者高效训练Mamba-YOLO模型,避免常见踩坑记录。

tech5的博客 826

程序员的这 10 个坏习惯!你占了几个?

作者: Brad Traversy | 编辑:郝鹏程来源:https://36kr.com/p/5170491.html编者按:每位开发人员在自己的职业生涯、学习经历中,...

Java后端技术 4933

Doris存储层设计介绍2——数据写入及删除流程

Doris存储层设计介绍2——数据写入及删除流程

爱吃辣条的博客 4583

五个很容易养成的Python代码坏习惯,反正我是染上了

  大部分的作者都是写的怎么才能写好Python,我今天呢正好相反,说说写代码时的几个坏习惯。有的习惯会让 Bug 变得隐蔽难以追踪,当然,也有的并没有错误,只是个人觉得不够优雅。   注意:示例代码在 Python 3.6 环境下编写   一、用列表作函数的默认参数   看下面这个例子:      正常我们期望的结果应该是这样的      但当我们执行代码后,只会得到这样的结果      与预期不一致。为什么呢?因为 Python 列表是可变对象,而且函数传参又是传的...

linjingyg的博客 189

在 Ubuntu 22.04 上配置 SonarQube 与 CI/CD 流水线实现自动化代码审查

本文详细介绍了在Ubuntu 22.04系统上配置SonarQube并与CI/CD流水线集成的完整流程,实现自动化代码审查。从环境准备、数据库配置到核心参数调优,再到与Jenkins和GitHub Actions的深度集成,提供了实战技巧和性能优化建议,帮助团队提升代码质量监控效率。

weixin_28829325的博客 258

LIN总线从入门到精通:低成本汽车通信协议原理与实战

在汽车电子和嵌入式系统中,串行通信协议是实现分布式控制的关键技术。其中,LIN(Local Interconnect Network)总线作为一种专为低成本应用设计的单主多从网络协议,其核心原理在于通过简化的“领导-汇报”通信模式,在满足车身控制、传感器数据采集等场景需求的同时,将硬件与布线成本降至最低。LIN总线采用标准化的帧结构,包含间隔场、同步场和受保护标识符场,并依赖调度表来管理通信时序,确保了网络的确定性与可靠性。其技术价值在于为车窗、座椅、灯光等非安全关键系统提供了高性价比的解决方案,是构建分层

weixin_29185167的博客 260

写代码时需要注意的问题及如何做好编程

新手写代码一定要养成良好的代码风格,编程是一项需要精细和逻辑思维的工作。尽管每个人的编程风格可能不同,但一些普遍的注意事项和方法可以帮助你写出高质量的代码。本文结合我实际代码实例,总结了写代码时需要注意的一些关键点以及如何做好编程的建议,希望对编程初学者有所帮助。变量初始化 边界条件检查 正确使用数据类型 内存管理 代码注释 调试和测试 代码结构和可读性 理解需求设计先行逐步实现保持代码整洁代码复用

CHENWENFEIc的博客 2222

STM32的bootloader程序(通过串口更新STM32应用程序)

STM32的bootloader程序(通过串口更新STM32应用程序),对bootloader进行浅浅的学习

星羽空间 1万+

程序员的15个“坏习惯”,你踩过几个坑?

在编程的世界里,有一些坏习惯似乎是程序员们共同的“小毛病”,但却可能严重影响我们的工作效率和代码质量。通过认识到这些问题并采取积极的行动来纠正它们,我们可以成为更出色的程序员,创造更优质的代码,取得更大的成功。命名是代码的门面,但有时我们可能会采用不规范、晦涩难懂的命名方式,让自己和其他人阅读代码变得痛苦。没有注释的代码就像一本没有目录的书,你会陷入翻阅的困境。有时候,我们可能会陷入“过度工程”的陷阱,写出复杂冗余的函数,难以维护和测试。提交不规范的代码可能会引发团队合作问题,增加代码审查的难度。

yangyufneg的博客 559

X猫免费小说安卓逆向分析

七猫免费小说安卓逆向分析 难度(♥♥) 文章目录七猫免费小说安卓逆向分析 难度(♥♥)1. 查壳2. 抓包分析3. sign1. Frida-rpc2. Native函数分析快3点了. 睡觉~ 白天再继续写! 1. 查壳 我这边使用的是ApkTool, 拖进去显示未加壳。 2. 抓包分析 POST https://xiaoshuo.wtzw.com/api/v1/login/index HTTP/1.1 net-env: 1 channel: qm-cbcpa056_wm is-white: 0 platf

Qiled的博客 4366

青龙面板实战:用快手极速版脚本日赚XX元的核心参数解析

本文深入解析了青龙面板运行快手极速版脚本的核心参数配置,旨在帮助进阶用户提升收益稳定性。重点剖析了设备标识符(did)的获取原理、多账号Cookie的精准拼接规则,以及如何通过科学设置定时任务频率来量化并优化收益,实现细水长流的稳定收益。

weixin_29310605的博客 1073

毁灭程序员的15个障碍

会议,什么都不懂的经理,生产效率指标——这就是你和下一个伟大软件之间的天堑。昨天必须得发布产品。用户争闹和咆哮某个缺失的功能。老板的老板说,我们最好迅速行动起来否则就炒我...

哲洛不闹的专栏 239

C#跨平台制图新纪元:Mapsui,一库在手,地图我有

深入学习Mapsui的渲染机制,定制属于你的地图样式,无论是颜色、图标还是文字,都可以随心所欲。

java专栏 1455

程序员要避免的10个坏习惯,看完终身受益

一、休息不够 我敢肯定你们很多人或者说几乎所有人都对这个坏习惯感到十分罪恶。我也是,对没有休息或休息不够依然有罪恶感。曾有一段时间,我凌晨六点入睡,中午一点左右起来吃午饭,一直工作到第二天凌晨六七点。这简直太常见了,几乎每天都是如此。在工作任务紧急的时候,我做过许多可笑的事情。我想我们每个人面对DDL的时候都有过这样的情况,我要说的不是这种,而是你的日常习惯。 我建议你每天尽量多休息。我不能说...

CSDnjava001的博客 278

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

极客新闻——11、程序员需要避免的10个坏习惯

本文笔记全部来自《极客新闻》——新鲜的技术资讯、权威的趋势剖析、别样的技术洞察 每位开发人员在自己的职业生涯、学习经历中,都会“开发”出一些坏习惯。 Traversy Media 的 Web 开发人员布拉德·特拉弗西(Brad Traversy)向读者展示了他自己有或是改不了的坏习惯。如果你已经有了这些毛病,希望你能够意识到它们,并可以开始改变。 1、休息不够 很多人或者说几乎所有人都对这...

HTZW的博客 230

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

休息不够、代码混乱、傲慢……程序员需要避免的 10 个坏习惯

认识到并改正,坏习惯就不是坏习惯。 编者按:每位开发人员在自己的职业生涯、学习经历中,都会“开发”出一些坏习惯。在这篇文章中,作者向读者展示他自己有或是老也改不了的坏习惯。 他希望如果你刚开始这份事业,能够避免这些坏习惯;如果你已经有了这些毛病,那希望你能够意识到它们,并可以开始改变。 1. 休息不够 我敢肯定你们很多人或者说几乎所有人都对这个坏习惯感到十分罪恶。我也是,对没有休息或休息不够依然有罪恶感。曾有一段时间,我凌晨六点入睡,中午一点左右起来吃午饭,一直工作到第二天凌晨六七点。这简直太常

Jadelikes_tone的博客 249

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

揭露不为人知的让你成为糟糕程序员的10个编程习惯

编程中,坏习惯往往是效率和成长的最大障碍。本篇文章总结了程序员常见的 **10 大坏习惯**,如过度工作、盲目学习多种语言、抄袭代码、拖延等。通过培养良好的编程纪律、注重原创、合理规划时间,你可以大幅提升职业能力。✨ **你曾犯过这些坏习惯吗?如何改进的?** 欢迎评论分享!📣 **点赞👍、收藏📌、关注👀**,一起成为更优秀的开发者!💻🚀

weixin_48681435的博客 794

程序员常见的 10 个坏习惯!你占了几个?

目 录 一、休息不够 二、拒绝寻求帮助 三、停止学习 四、混乱的代码 五、工作和生活的不平衡 六、糟糕的办公室政治 七、不能从错误中吸取教训 八、太早放弃 九、做一个无所不知的人 十、不接受建设性批评 每位开发人员在自己的职业生涯、学习经历中,都会“开发”出一些坏习惯。在这篇文章中,小编向你们展示我自己有或是老也改不了的坏习惯。我希望如果你刚开始这份事业,能...

dream317 604

糟糕程序员的20个坏习惯

阅读本文大约需要 5 分钟。今天,我想和你聊一聊优秀程序员的基本素养。我想你肯定遇到过这样一类程序员:他们无论是写代码,还是写文档,又或是和别人沟通,都显得特别专业。每次遇到这类人,我都在...

程序员小灰的博客 391

程序员的 10 个坏习惯!你占了几个?

点击关注公众号,Java干货及时送达认识到并改正,坏习惯就不是坏习惯。编者按:每位开发人员在自己的职业生涯、学习经历中,都会“开发”出一些坏习惯。在这篇文章中,作者向读者展示他自己有或是老...

Java技术栈,分享最主流的Java技术 399

程序员的坏习惯

程序员的坏习惯

liuwnagshinidie的博客 184
上一篇: 程序员除了上班,还可以怎么赚钱?
下一篇: 佛说 :程序员你与我有缘。
CodingPs
博客等级 码龄7年 182粉丝 253原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值