作家
登录

如何对机器学习代码进行单元测试?

作者: 来源: 2017-12-12 14:12:38 阅读 我要评论

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散


今朝,关于神经收集代码,并没有一个特别完美的单位测试的在线教程。甚至像 OpenAI 如许的┞肪点,也只能靠 盯着每一行看来思虑哪里错潦攀来寻找 bug。很明显,大年夜多半人没有那样的时光,并且也憎恶这么做。所以欲望这篇教程能赞助你开端稳健的测试体系。

起首来看一个简单的例子,测验测验找出以下代码的 bug。

看出来了吗?收集并没有实际融合(stacking)。写这段代码时,只是复制、粘贴了 slim.conv2d(…) 这行,修改了核(kernel)大年夜小,忘记修改实际的输入。

只有最终的验证缺点这一条线索情况下,必须回想全部收集架构才能找到问题地点。很明显,你须要须要一个更好的处理方法。

是以,只须要比较值袈溱练习步调前后有没有产生变更,我们就可以发明这种情况。

哇。只须要短短 15 行不到的代码,就能包管至少所有创建的变量都被练习到了。

这个测试,简单然则却很有效。如今问题修复了,让我们来测验测验添加批量标准化。看你可否悠揭捉?睛看出 bug 来。

发清楚明了吗?这个 bug 很奇妙。在 tensorflow 中,batch_norm 的 is_training 默认值是 False,所以在练习过程中添加这行代码,会导致输入无法标准化!亏得,我们方才添加的那个单位测试会急速捕获到这个问题!(3 天前,它方才赞助我捕获到这个问题。)

让我们看别的一个例子。这是我大年夜 reddit 帖子中看来的。我们不会太深刻原帖,简单的说,发帖的人想要创建一个分类器,输出典范围在 0 到 1 之间。看看你可否看出哪里纰谬。

这个实际上是作者一周前方才碰着的状况,很难堪,然则也是重要的一个教训!这些 bug 很难发明,有以下原因。

  • 这些代码不会崩溃,不会抛出异常,甚至不会变慢。
  • 这个收集仍然能练习,并且损掉(loss)也挥萋降。
  • 运行多个小时后,值回归到很差的结不雅,让人抓耳挠腮不知若何修复。

发明问题了吗?这个问题很难发明,结不雅异常难以懂得。简单的说,因为猜测只有单个输出值,应用了 softmax 交叉熵函数后,损掉就会永远是 0 了。

我们第一个实现的测试,也能发明这种缺点,然则要反向检查:包管只练习须要练习的变量。就生成式对抗收集(GAN)为例,一个常见的 bug 就是在优化过程中不当心忘记设置须要练习哪个变量。如许的代码到处可见。

这段代码最大年夜的问题是,优化器默认会优化所有的变量。在像生成式对抗收集如许高等的构造中,这意味着遥遥无期的练习时光。然而只须要一个简单测试,就可以检查到这种缺点:

也可以对剖断模型(discriminator)写一个同类型的测试。同样的测试,也可以应用来增强大年夜量其他的进修算法。很多演员评判家(actor-critic)模型,有不合的收集须要用不合的损掉来竽暌古化。

这里列出一些作者推荐的测试模式。

  • 确保输入切实其实定性。如不雅发明一个诡异的掉败测试,然则却再也无法重现,将会是很糟糕的工作。在特别须要随机输入的场景下,确保用了同一个随机数种子。如许出现了掉败后,可以再次以同样的输入重现它。
  • 确保测试很精简。不要用同一个单位测试检查回归练习和检查一个验证集合。如许做只是浪费时光。
  • 确保每次测试时都重置了图。

这篇文┞仿列出的测试远远没有完全,然则是一个很好的起步!如不雅你发明有其他的建议或者某种特定类型的测试,请在 twitter 上给我消息!我很愿意写这篇文┞仿的续集。

比起在运行了很多天的练习后才发明,我们若何提前预防呢?这里可以明显留意到,层(layers)的值并没有达到函数外的任何张量(tensors)。在有损掉和优化器情况下,如不雅这些张量大年夜未被优化,它们会保持默认值。

作为总结,这些黑盒算法仍然有大年夜量办法来测试!花一个小时写一个简单的测试,可以节约成天的从新运行时光,并且大年夜大年夜晋升你的研究才能。天才的设法主意,永远不要因为一个充斥 bug 的实现而无法成为实际。

文┞仿中所有的不雅点,仅代表作者的小我经验,并没有 Google 的支撑、赞助。

最简单的发明这个问题的测试方法,就是包管损掉永远不等于 0。

查看竽暌耿文原文

https://medium.com/@keeper6928/how-to-unit-test-machine-learning-code-57cf6fd81765

【编辑推荐】

  1. IBM应用GPU将机械进修效力晋升十倍
  2. Gluon给人工智能开辟人员带来了的自我调优的机械进修
  3. 熊猫吃短信:全新基于机械进修的垃圾短信过滤应用
  4. 机械进修怎么学?阿里法度榜样员只用七步带你控制Python机械进修!
  5. 安然对人工智能的需求——大年夜机械进修到机械创造
【义务编辑:庞桂玉 TEL:(010)68476606】

  推荐阅读

  想理解、会用Docker,这篇文章就够了!

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 Docker是啥?打开翻译君输入Docker 结不雅显示船埠工人,没错!船埠工人搬运的是集装箱,那么今天要讲的Docker其操作的也是集装箱,>>>详细阅读


本文标题:如何对机器学习代码进行单元测试?

地址:http://www.17bianji.com/lsqh/39707.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)