Keras 是一个花哨的工具,还是它实际上对研究有帮助,或者两者兼而有之?

数据挖掘 喀拉斯 工具
2021-10-07 17:23:16

我在环境科学实验室攻读博士学位的第二年,这里的机器学习专家并不多。

在我研究的一部分中,我应该使用多层感知器从我之前确定的一系列输入中构建模型。因此,对于这一部分,我建议使用深度学习框架,特别是 Keras 和 Tensorflow 或 CNTK,但在实验室中,我的主管告诉我,对于真正的应用程序,他们不想依赖谷歌或微软的框架,他们更喜欢开发他们自己的工具,如果有升级或类似的东西,这些工具不会随着时间的推移而改变。一位研究人员创建了一个中性网络并获得了不错的结果,但是当我们有兴趣进行一些微调时,他的代码更新或测试新事物(例如 dropout)会更加复杂。

我开始使用那些考虑到可重复性的框架,因为我只需要使用 Keras 中的函数并定义参数。我认为其他想要测试/使用我的模型的研究人员应该使用我建议的配置,不要试图理解我提供的代码。所以我得到了一些不错的结果,现在正处于微调阶段,但是其他研究人员的工作有一个稍微好一点的结果,但是经过了一个我还没有尝试过的正则化步骤。

所以这位研究人员告诉我,我应该放弃我在 Keras 的工作并开始使用他的代码。他还告诉我,Keras 只是一些花哨的工具,在研究中不需要非常精确的模型,只要有好的结果并使用有效的代码即可。

所以我的问题是:这个研究人员告诉我的对吗?Keras 真的用于研究吗?如果开发了一些框架,为什么不使用它们而不是重新发现轮子,对吗?

2个回答

一般来说,许多研究人员使用的任何工具根据定义都是有用/有帮助的。

对于 Keras 和其他神经网络框架(如 PyTorch、TensorFlow 等)的特殊情况,很多人都在使用它们。您可以通过阅读该主题中的论文来看到这一点,因为通常会提到实现是在哪个框架中进行的。您还可以通过计算引用来检查“流行度”,例如kerastensorflow,它们都有数千次引用。

一般来说,您应该更喜欢在该领域使用的众所周知的工具。这些都是经过验证的,您至少可以在一定程度上相信它们产生的结果是正确的(当然,减去用户错误)。从头开始实施神经网络框架并不容易,任何审阅者都可以指出可能存在编程错误和/或错误。此外,正如您所提到的,还有可重复性的优势,因为人们更有可能运行您的代码。

另请注意,许多框架实际上是由研究人员制作的,因此它们专门针对其他研究人员,并且它们的设计是为了便于实验。例如,在 keras 中,很容易将一些自定义功能实现为损失或层,因此您可以将其与另一个网络设计集成。一个框架可以有另一个目标用户群,例如部署低功耗平台或计算机,而 Keras 没有。

最后,您必须考虑到,由于有很多人使用 Keras,因此围绕它有一个大型社区,您可以从中获得支持,例如Stack Overflowkeras-users google group使用自定义代码将使这变得更加困难或不可能。

如果您不想依赖特定框架,您始终可以以ONNX格式导出网络,以便将其与其他框架或您自己的代码一起使用。

我花了相当多的时间尝试调试在 Keras 上运行的相同测试和在为在硬件上运行而定制的框架之间的差异。当硬件结果是垃圾或表现不佳时,就会出现这种情况。Keras 结果足够可靠,可以用作这些目的的基准,并且不考虑对其进行改进。

但是我也遇到了与 Keras 的版本兼容性问题,所以这不是一个没有根据的问题。有时我尝试使用已弃用的层运行较旧的网络,这可以通过使用相当简单的较旧版本的 Keras 来解决。或者,如果同时需要新旧图层,则可以自己重新添加旧图层,以及一般的自定义图层。请注意,弃用不会在一夜之间发生,并且对于可能会破坏某些东西的更新似乎有很长的警告时间。所以这是一个问题,但不是一个真正的大问题。