机器之心报道 编辑:杜伟、小舟 以后在本地运行KerasBazel测试将不再花费几小时,只需要几分钟。 对于深度学习领域的从业者而言,Keras肯定不陌生,它是深度学习的主流框架之一。2015年3月27日,谷歌软件工程师、Keras之父FrancoisChollet在其GitHub上提交并公布了Keras的首个版本。作为使用纯Python编写的深度学习框架,Keras的代码更加简单方便,适用于初学者。此外,Keras具有很强的易扩展性,能够直观地定义神经网络,函数式API的使用令用户可以将层定义为函数。 Keras官网地址:https:keras。io 为了训练自定义神经网络,Keras需要一个后端,在v1。1。0版本之前,Keras的默认后端都是Theano。2015年11月9日,谷歌发布了TensorFlow。Keras开始支持TensorFlow作为后端。渐渐地,TensorFlow成为最受欢迎的后端,并从Kerasv1。1。0发行版开始成为它的默认后端。tf。keras正是在TensorFlowv1。10。0中引入的,这是将Keras直接集成到TensorFlow包中的第一步。 当谷歌在2019年6月发布TensorFlow2。0时,他们宣布Keras成为TensorFlow的官方高级API。并且,在Keras2。3。0版本发布时,Francois表示这是Keras首个与tf。keras同步的版本,也是Keras支持Theano等多个后端的最终版本。所有深度学习从业者都应将其代码转换成TensorFlow2。0和tf。keras软件包。这意味着二者的合并,但看似双赢的决定,很多开发者却不买账。API的混乱与割裂不仅令开发者不知所措,也加大了开发者寻找教程的难度。 是时候做出改变了!近日,Keras之父FrancoisChollet在其推特宣布一项重要决定:他们已经将Keras的代码从TensorFlow代码库中分离出来,移回到了自己的repo。 对于Keras从TensorFlow分离后有哪些好处?Francois表示:这将提升开源贡献者的开发体验。对于用户而言,这将使他们可以在本地运行测试,不再需要编译TF来测试Keras了,并且还将改善CI时间。 Keras正式从TensorFlow代码库中分离 此次Keras分离过程的负责人是谷歌高级软件工程师ScottZhu,他代表Keras团队向所有Keras用户发表了公开声明,解释了Keras从TensorFlow代码库中分离出来的缘由以及分离后为用户带来的诸多便利之处。 开发团队花费了很多精力使TensorFlow更加模块化,并优化了Keras和TensorFlow之间的依赖关系。最终Keras从TensorFlow代码库中分离出来,并拥有了自己独立的代码库。这使Keras能够使用TensorflowPythonAPI作为PIP包依赖项,且无需在构建和测试时编译TensorFlow。因此现在在本地运行KerasBazel测试只需要几分钟,而不是几小时。 变更之后,当前TensorFlow代码库中的Keras部分将很快被删除。这意味着: 1。Keras开源代码库的访问地址将发生变更; 原地址:https:github。comtensorflowtensorflow 新地址:https:github。comkerasteamkeras 用于代码库管理的git工具。 3。任何在先前代码库中未解决的Keras相关活跃问题将在现有的ticket线程中处理,并将通过提交到新代码库进行修复; 4。与原代码库相关的陈旧问题将被关闭。如果你认为仍然是有价值的问题,请随时在新代码库中重新打开该问题; 5。新Keras代码库在此次变更前未完成的任何PRissue都被认为是陈旧的,将被关闭。 用户想要提交贡献,如何做? 用户在提交自己的代码以供审查并获得批准时,必须签署谷歌个人贡献者许可协议(CLA),这样才可以将代码放入Keras代码库中。此外,在提交更多的贡献时,用户也应首先通过问题跟踪器(issuetracker)与Keras联系沟通。 包括项目成员在内所有用户的提交都必须接受审查。为此,Keras使用GitHub拉取请求(pullrequest,PR),并建议用户在创建PR之前阅读相关指南。 完成本地更改并通过测试验证后,用户可以在kerasteamkeras项目中打开并发送PR,之后会经过一系列的测试来验证它的正确性。一旦PR被审查者测试和批准,PR将被镜像到谷歌内部存储库。一旦合并到Google内部存储库成功完成,PR还将被标记为已合并(merged)。这与TensorflowOSS的贡献流程相同,相关示例如下图所示: 在做任何更改之前,Keras团队建议用于打开issue,并在上面讨论。Keras也会给予反馈并对用户提出的更改进行验证。如果更改很小,如文档修复中简单的bug修复,则只需打开PR无需讨论。 与个人用户不同,企业用户提交的贡献需要遵守《谷歌软件授权与企业贡献者许可协议》。 开发所需的工具 使用Keras开发所需要的工具主要包括如下: 用于创建和测试Keras项目的Bazel工具和P 用于代码库管理的git工具。 设置和检查本地工作区 以苹果Mac电脑(Linux系统的配置非常相似)为例,使用如下命令设置并检查本地工作区的配置: 下载Keras代码和设置虚拟环境 Python虚拟环境是创建独立环境的强大工具,可以将任何系统级配置的更改隔离开来。因此,Keras强烈建议避免出现任何意外的依赖或版本问题。 本地运行测试 在本地运行一个测试的代码如下:(venvdir)scottzhumacbookpro2:kerasscottzhubazeltestcoptkeras:backendtestWARNING:Thefollowingconfigswereexpandedmorethanonce:〔v2〕。Forrepeatableflags,repeatsarecountedtwiceandmayleadtounexpectedbehavior。INFO:Optionsprovidedbytheclient:Inheritedcommonoptions:isatty1terminalcolumns147INFO:ReadingrcoptionsfortestfromUsersscottzhuworkspacekeras。bazelrc:Inheritedbuildoptions:appleplatformtypemacosdefineopensourcebuildtruedefineusefastcppprotosfalsedefinetensorflowenablemlirgeneratedgpukernels0defineallowoversizeprotostruespawnstrategystandalonecoptannouncercdefinegrpcnoarestrueconfigshortlogsconfigv2INFO:ReadingrcoptionsfortestfromUsersscottzhuworkspacekeras。bazelrc:testoptions:defineopensourcebuildtruedefineusefastcppprotosfalseconfigv2INFO:Foundapplicableconfigdefinitionbuild:shortlogsinfileUsersscottzhuworkspacekeras。bazelrc:outputfilterDONTMATCHANYTHINGINFO:Foundapplicableconfigdefinitionbuild:v2infileUsersscottzhuworkspacekeras。bazelrc:definetfapiversion2actionenvTF2BEHAVIOR1INFO:Foundapplicableconfigdefinitionbuild:v2infileUsersscottzhuworkspacekeras。bazelrc:definetfapiversion2actionenvTF2BEHAVIOR1INFO:Analyzedtargetkeras:backendtest(0packagesloaded,0targetsconfigured)。INFO:Found1testtarget。。。Targetkeras:backendtestuptodate:bazelbinkerasbackendtestINFO:Elapsedtime:45。535s,CriticalPath:45。26sINFO:19processes:19local。INFO:Buildcompletedsuccessfully,20totalactionskeras:backendtestPASSEDin45。2sStatsover4runs:max45。2s,min40。0s,avg41。5s,dev2。1sINFO:Buildcompletedsuccessfully,20totalactions 最后为大家推荐一篇Keras的中文教程,它由Keras团队软件工程师金海峰翻译自官网教程,详细介绍了Keras和TensorFlow的基本用法和核心概念,并通过变分自编码器(VariationalAutoencoder)和超网络(Hypernetwork)这两个完整的例子展示了如何在实践中使用Keras。 教程知乎链接:https:zhuanlan。zhihu。comp380472423 参考链接: https:github。comqlzh727 https:zhuanlan。zhihu。comp364670970 https:www。jiqizhixin。comarticles202104026 https:docs。github。comengithubcollaboratingwithpullrequestsproposingchangestoyourworkwithpullrequestsaboutpullrequests