JAXenter:让我们从一个更笼统的问题开始-为什么在企业环境中将Java与机器学习结合使用是值得的? 有什么优势?如何使用Java?为什么不只使用Python?
Christoph Henkelmann :对于初学者,您必须要小心。 Java并不总是比Python更好。 一种语言不要过于教条,因为可以使用多种语言。
在此示例中,我特别关注Java,因为那里有许多Java实现的系统。 这尤其适用于企业部门,即运行重要系统的大公司部门。 如果我有一个系统,并且希望使用(例如)机器学习功能对其进行扩展,那么可以将它们集成到此现有结构中就很好了。 一方面,有技术上的优势,因为我的依赖较少,整个过程也不会太复杂。 如果我有20个应用程序服务器,则无论如何我都不必维护Python安装(如果我已经拥有Java运行时)。
Java是企业最重要的语言之一。
另一方面,业务原则非常重要。 Java是最重要的商业语言之一。 例如,如果您想销售新产品(例如机器学习产品)或将机器学习作为服务提供商实施,那么客户也很容易拥有Java解决方案。 首先,在政治层面上,因为建立了Java。 人们很满足,整个事情都是安全的。 其次,存在一些技术优势。 但是,它随后进入了个人品味的领域。 Java非常好,快速并且适用于Web,因此这不是一个坏主意。 但是,当然,您可以采用其他任何方式。
JAXenter:如果您想在Java服务器上运行TensorFlow模型,那么关于工作流程,您需要考虑什么?
Christoph Henkelmann:通常,这取决于情况,但是预处理是非常重要的一点。 这很重要,因为如果要训练模型,必须预先预处理数据。 这种预处理通常是模型质量中最重要的部分。 当然,我必须确保在实时运行模型时具有完全相同的预处理,尤其是在使用另一种编程语言的情况下。
在这里,我有两个选择:要么将预处理作为模型的一部分,要么必须确保重新创建可以用Java编写Python的预处理部分。 我必须再次强调这部分的重要性。
预处理非常重要。
另一个问题与组织性质有关,并且在很大程度上取决于我模型的规模。 如果我的模型不能超过几兆字节,那么可以将其放入WAR(Web应用程序档案库)或Java工件中,并具有正常的工作流程。 基本上,这就像与为我的Web应用程序提供资产的设计师合作,例如背景图形。 我从机器学习团队那里获得了一个ZIP文件,其中包含所有内容。
最后,我学习了如何加载所有这些并将其放入我的应用程序。
当我的模型变得非常庞大时,它将变得更加令人兴奋。 但是,我还没有实践过。 然后,您必须要小心,因为可能有一个包含400至500 MB数据的存档,并且必须在所有应用程序储备中将其提供。 但是同样,我如何组织我的工作流程更可能是组织问题,而不是技术问题。
JAXenter:这当然是一个令人兴奋的话题,但我们通常希望将重点放在Java服务器上的TensorFlow问题上。 您是否在这种情况下使用任何其他工具或软件? 您的堆栈是什么样的?
Christoph Henkelmann:关于我的书架 -我使用Jupyter笔记本电脑是因为我可以访问许多可能的可视化工具,在Python中使用可视化工具仍然比在Java中更容易使用。 然后,我有一个Python会话,可以用经典的方式进行工作,就像所有教程中都显示的那样。 如果数据越来越大,那么我需要大量数据,我只是简单地手动编写预处理程序,例如使用Java命令行应用程序,因为Python中的简单预循环有时会花费很长时间。 这与Java相反,后者速度很快。 这意味着,如果我必须预处理大量数据,并且知道预处理的运行方式,那么我有时会用Java编写数据,因为运行起来速度更快。
我只是遇到这样的情况,在Python中进行预处理需要30分钟以上,而在Java中则需要1分钟。 当然,我可以使用它来改进和调整预处理。 当我将某些东西投入生产并必须利用我的堆栈时,我使用的内容还取决于我要执行的操作–如果创建Web应用程序,则使用Ninja Web框架;如果是中间件,则使用Apache CXF。
但是我也使用其他框架。 在大多数情况下,将需要数据库,并且我更喜欢使用jOOQ,而不是Hibernate。 这是一个相当普通的标准Java实用程序框架,没有什么比这更好的了。 开发TensorFlow模型时使用TensorBoard仅重要,因为它可以节省大量时间。 这使得开发和调试更加有趣。
我只是遇到这样的情况,在Python中进行预处理需要30分钟以上,而在Java中则需要1分钟。
JAXenter:您提到Java是一种网络语言。 如果您想为移动部门实施类似的解决方案,将会是什么样?
Christoph Henkelmann:当我们谈论Android时,理论上我们会使用Java,但是运行Java的环境却完全不同。 现在,当我想在移动环境中使用TensorFlow时,我首先要使用Google的TensorFlow Lite Line。 不一定一定要好,但这就是Google计划在IOS和Android中进行部署的目的。 但是,我不太确定其他平台。 经过专门优化,可以在移动设备上运行。
JAXenter: 机器学习领域中是否有新的大趋势,或者您现在感兴趣的是任何令人兴奋的工具?
Christoph Henkelmann:从算法上来说,我还没有很多时间来使用它。 当前特别令人兴奋的两件事之一是注意。 顾名思义,注意力使我的机器学习过程将注意力集中在输入的某些部分,而不是一视同仁。 那很有趣。
所谓的对抗网络也很有趣。 我认为目前它们确实令人兴奋,因为我认为它们非常适合生成人工训练数据。 数据越多越好,如果我可以生成数据,那将是完美的。 考虑到这项技术,尽管我具有Java的背景以及如何在Linux服务器上更加活跃,但我接下来确实要看的是CNTK。 但是当然,只有在Microsoft强迫自己为其创建mac版本时。 我已经在2017年机器学习大会上提到过TensorFlow API并不总是很好。 我还看了关于CNTK的纪录片,是的,这很好。 我希望能够尽快使用它。
JAXenter:CNTK可能有哪些用例?
Christoph Henkelmann:微软的CNTK与Google的TensorFlow基本相同-更加注重语言。 最后,尽管如此,许多算法都是相似甚至相同的。
JAXenter:谢谢!
翻译自: https://jaxenter.com/tensorflow-java-machine-learning-for-enterprise-142939.html