你好 GitHub!每一位开源爱好者的好朋友「HelloGitHub」

大家好,今儿 HG 有幸邀请到:Lanking 一位亚马逊 AI 软件工程师、开源爱好者和贡献者。他是亚马逊开源的 Java 深度学习框架 DJL 的核心维护者、Apache MXNet 的 Committer(提交者),一枚喜欢滑雪的大佬程序员。

下面就让这位大佬聊聊他在 GitHub 和一个开源项目的作者互道“你好”后聊了些什么、搞出了什么好玩的东西~

一、故事的开头

我是 Lanking 一位 AI 软件工程师、《HelloGitHub 月刊》的读者,故事的开始是我们 DJL 项目:

https://github.com/awslabs/djl

正在找增强学习的例子,然后目前全网提供的方案也没什么 Java 的实现和实战项目。

偶然间,在程序员都爱看的《HelloGitHub 月刊》最近的一期,看到了一个仅用 Java 基础类库写的愤怒小鸟开源游戏项目。

https://github.com/kingyuluk/FlappyBird

该项目结构十分清晰,代码也很规范,我感觉自己的某些东西被触动了。于是乎,我就给这个项目提了一个 issue:

如上图,我打完招呼就直切主题,说明我的来意:您有没有兴趣用 DJL 做一个 RL 的愤怒小鸟,就是用深度学习框架 DJL 赋予这个小鸟“永生”,做个“不死鸟”。

二、他不理我了

FlappyBird 项目的作者叫:kingyuluk(后面就叫他“K”)

Issue 是开发者之间有效的沟通手段,但我发完 issues 后,虽然 K 当时说感兴趣,然后就没然后了...过了差不多三个月,突然有一天,他回复了这个 issue:

K 说他在用 DJL 实现的过程中遇到了问题。原来他自己闷头去搞了,现在遇到问题才想起我!

哼~虽然等待有些难熬,但我还是开心地开始帮他看代码,最开始只是在这个项目里开了一个分支,但是后来越做改的东西越多,于是作者 K 就开了一个新的项目来做这件事情。

https://github.com/kingyuluk/RL-FlappyBird

三、办法总比困难多

我和 K 开始在新的项目进行正式开发,期间出现了各种波折和奇奇怪怪的问题:

从一开始项目跑不起来,到中间连续跑两天都没好效果,到最后在 GPU 上做性能优化改进。

眨眼两个月时间过去了,我很多次都担心 K 会半途而废,放弃不做了。因为这些对于一个大三刚接触 Java 半年的本科学生来说真的有些困难。

让我们继续开发下去的动力就是经过多次改动和优化之后,这个“笨”鸟终于能稍微变得聪明些了,但是离“不死”还差很远。然后我就拉来了同为 DJL 维护者的 Zach 他比我更懂 RL,来帮我们:

通过他的鼓励,并按照他的建议修改后,我们在 CPU 上训练的小鸟可以玩到 6-7 分。然后我们决定试试看 GPU,就开了一台带 T4 显卡的机器,然后跑了几个小时,感觉训练速度还是不够快。这可不行,我就想到了 HelloGitHub 的 Java 技术群的小伙伴们,他们甩了个表情后:

开始帮我解决相关的性能问题并提供了一些解决思路,在他们的认真回答和热心指导下,问题总算解决了!然后训练就变得快的飞起,几个小时就跑了 300 万步,最后这个不死鸟就诞生了!

详细的实现过程,会在本周的另外一篇文章《用 Java 训练出“不死鸟”》细细道来~

四、故事的结尾

这个故事起于一个 “Say hi” 的 issue,结束的时候我和项目的作者成为了朋友。开源都是用课余和休息时间,真的很容易半途而废。

契而不舍的精神是开源必备的精神,花几天、几周、几个月拼命的想把自己的开源项目做好,过程虽然很难,但是看到有人用、能够把自己想法展示在大家面前,就会感觉很开心,便觉得一切值了。

DJL 一直致力于发掘 Java 在深度学习领域的应用。我们会经常去思考,如何更好的将深度学习和 Java 结合在一起,希望我们的付出能够给开源社区带来不一样的东西!

五、HG 想说的话

“做开源项目很难,做好更难,HG 愿陪你一起变好。“

我问 K 在收到 Lanking 大佬的 issue 时的感受,他说出乎意料,因为他觉得自己的 FlappyBird 只是一个很基础的项目,竟然收到来自亚马逊大佬的关注。

其实只要你的项目能让其它开源爱好者(大佬)看到闪光点和爱️,那么他们就愿意给出建议、贡献和指导,如此以往你的技术提高只是时间问题。

当然 HelloGitHub 月刊的收录和推荐也是很重要的一个原因呀!HelloGitHub 是每一位开源爱好者的好朋友,帮助优秀的开源项目被更多人发现和喜爱。

欢迎开源项目的作者们来 HG 分享自己做开源项目的故事,和 HG 互道“你好”后,会碰撞出什么样的火花呢?加微信:xueweihan(备注:你的 GitHub id)

最新文章

  1. jvm系列(一):java类的加载机制
  2. [Logstash-input-redis] 使用详解
  3. MSSQL FOR MXL PATH 运用(转载)
  4. BZOJ-3226 校门外的区间 线段数+拆点(类似的思想)
  5. WGZX:javaScript 学习心得--1
  6. Java的内存管理与内存泄露
  7. python中列表和字典的高级应用
  8. 安装centos7注意事项
  9. 前端基本知识(一):W3C标准&&冒泡事件,捕获事件,W3C DOM对象模型,对比分析
  10. 009一对一 主键关联映射_单向(one-to-one)
  11. Microsoft SQL Server 2008 R2数据库备份 - 人工备份
  12. 51nod1812树的双直径(换根树DP)
  13. layer.load的使用
  14. QT系统托盘应用程序
  15. python属性查找 深入理解(attribute lookup)
  16. express4.x socket
  17. Devexpress VCL Build v2013 vol 13.2.5 发布
  18. 【转】4G18的低成本NA玩法
  19. 飘逸的python - 不使用keyword,求和1+2+…+n
  20. Python_ip代理

热门文章

  1. Java中的位掩码BitMask
  2. 禅道 基于原lnmp 搭建
  3. jmeter压测mysql数据库
  4. 40 张图带你搞懂 TCP 和 UDP
  5. 【鸿蒙开发板试用报告】用OLED板实现FlappyBird小游戏(中)
  6. 简单RTSCamera实现
  7. 注册dll命令
  8. Mongo管理
  9. AlanShan数据库课程设计报告
  10. 第3.8节 Python百分号占位符的字符串格式化方法