《如何选择第一个深度学习框架》一直是初学者头疼的问题。在这篇文章中,来自deepsense.ai的研究人员在一个高级框架上给出了他们的答案。在Keras和PyTorch的对比中,作者也给出了同一个神经网络在不同框架下的性能基准测试结果。目前在GitHub上,Keras拥有超过31000颗Star,而后来出现的PyTorch拥有近17000颗Star。值得一提的是,虽然PyTorch在4月底的0.4版本中已经加入了对Windows的支持,但在Windows上的Keras和TensorFlow的稳定性还是略有差距。两个框架的链接:Keras:https://github.com/keras-team/keras(https://keras.io/)PyTorch:https://github.com/pytorch/pytorch想学深吗学习?您想将深度学习应用到您的业务中,还是使用深度学习来开展副业,或者只是为了获得一些适销对路的技能?无论目标是什么,选择合适的深度学习框架都是实现目标的第一步。我们强烈建议您选择Keras或PyTorch。它们都是非常强大的工具,学习和试验起来很有趣。我们站在老师和学生的角度思考。本文作者Piotr在企业中举办了Keras和PyTorch研讨会,而Rafa?正在学习这两种框架。1.简介Keras和PyTorch是数据科学家中流行的深度学习开源框架。Keras是一种高级API,能够在TensorFlow、CNTK、Theano或MXNet上运行(或作为TensorFlow中的tf.contrib)。Keras于2015年3月首次发布,此后以其易用性和简洁的语法得到支持,并迅速发展。Keras是Google支持的框架。PyTorch于2017年1月发布,是一个专注于直接操作数组表达式的低级API。作为需要优化自定义表达式的学术研究和深度学习应用程序的首选解决方案,它在去年受到了广泛关注。它是Facebook支持的框架。在讨论两者的具体细节之前,我们想声明,对于“哪个框架更好”这个问题,我们没有直接的答案。选择哪种框架最终取决于你的技术背景、需求和期望。本文旨在帮助您更好地理解何时应该选择Keras或PyTorch。一句话总结:Keras更容易学习和实验,标准层,即插即用;PyTorch提供了一种较低级别的方法,对于具有更多数学背景的用户来说更灵活。其次,为什么不使用其他框架呢?本文不讨论选择TensorFlow作为最佳深度学习框架的优缺点,因为我们认为TensorFlow与Keras(TensorFlow的官方高级库)和PyTorch相比,对新手不够友好。尽管您可以在Theano上找到一些教程,但它不再处于积极开发状态。Caffe缺乏灵活性,Torch使用Lua语言(但是重写非常困难:))。MXNet、Chainer和CNTK目前使用较少。3.KerasvsPyTorch:易用性和灵活性Keras和PyTorch在不同的抽象层次上运行。Keras是一个更高级别的框架,它将常见的深度学习层和操作封装到干净的、乐高积木大小的构建块中,将数据科学家从深度学习的复杂性中解放出来。PyTorch提供了一个相对底层的实验环境,允许用户更自由地编写自定义层和查看数值优化任务。当您可以使用Python的全部功能并访问所用所有功能的核心时,复杂架构的开发会更加直接。这自然是以冗长为代价的。下面使用Keras和PyTorch中定义的简单卷积网络来对比两者:1.Kerasmodel=Sequential()model.add(Conv2D(32,(3,3),activation='relu',input_shape=(32,32,3)))model.add(MaxPool2D())model.add(Conv2D(16,(3,3),activation='relu'))model.add(MaxPool2D())model.add(Flatten())model.add(Dense(10,activation='softmax'))2。PyTorchclassNet(nn.Module):def__init__(self):super(Net,self).__init__()self.conv1=nn.Conv2d(3,32,3)self.conv2=nn.Conv2d(32,16,3)self.fc1=nn.Linear(16*6*6,10)self.pool=nn.MaxPool2d(2,2)defforward(self,x):x=self.pool(F.relu(self.conv1(x)))x=self.pool(F.relu(self.conv2(x)))xx=x.view(-1,16*6*6)x=F.log_softmax(self.fc1(x),dim=-1)returnxmodel=Net()上面的代码片段显示了两个框架之间的细微差别。至于模型训练,在PyTorch中大约需要20行代码,而在Keras中只需要一行代码。GPU加速在Keras中隐式处理,而PyTorch要求我们指定何时在CPU和GPU之间迁移数据。如果您是新手,Keras作为更高级别的框架可能具有明显的优势。Keras确实更具可读性和简洁性,允许用户跳过一些实现细节并更快地构建他们的第一个端到端深度学习模型。然而,忽略这些细节会限制用户探索深度学习管道中每个计算模块的内部工作原理的机会。使用PyTorch将提供更多机会来更深入地思考核心深度学习概念,例如反向传播和其他训练过程。也就是说,虽然Keras比PyTorch简单得多,但它绝不是一个“玩具”,它是初学者和经验丰富的数据科学家都在使用的严肃的深度学习工具。例如,在DSTL卫星图像特征检测Kaggle竞赛中,前3名团队的解决方案全部使用Keras,第四名(deepsense.ai团队)使用PyTorch和Keras。您的深度学习应用程序是否需要比Keras所能提供的更大的灵活性值得考虑。根据您的需要,遵循最小功率规则,Keras可能是最佳解决方案。3.结论Keras:更简洁更简单的APIPyTorch:更灵活,鼓励用户理解深度学习概念4.KerasvsPyTorch:学习资源的流行和可用性框架流行不仅代表易用性,社区支持也很重要——教程、代码存储库和讨论组。截至2018年6月,Keras和PyTorch在GitHub和arXiv论文中越来越受欢迎(请注意,大多数提到Keras的论文也提到了它的TensorFlow后端)。根据KDnuggets调查,Keras和PyTorch是增长最快的数据科学工具。虽然这两个框架的文档都更好,但PyTorch的社区支持更强大:它的讨论板非常值得一游,您可以在其中找到在文档或StackOverflow上找不到的答案。我们发现针对初学者的基于Keras的深度学习课程比基于PyTorch的课程更容易,这使得前者更容易为初学者所接受。Keras的代码可读性和绝对易用性使其被深度学习爱好者、教师和强大的Kaggle冠军广泛使用。有关深度学习课程的重要Keras资源和示例,请参阅PiotrMigda?的文章《Starting deep learning hands-on: image classification on CIFAR-10》和Keras创作者Fran?oisChollet的书《Deep Learning with Python》。至于PyTorch资源,我们推荐官方教程,它提供了一种更具挑战性的综合方法来学习神经网络的内部工作原理。结论Keras:大量教程和可重用代码可用PyTorch:出色的社区支持和积极的开发5.KerasvsPyTorch:调试和自省Keras包含大量计算模块,这使得很难查明导致问题的代码。相比之下,PyTorch更冗长,我们可以逐行执行脚本。与调试NumPy类似,我们可以轻松访问代码中的所有对象并使用打印语句(或任何标准Python调试语句)来查看有问题的代码。Keras用户创建的标准网络比PyTorch用户创建的标准网络更不容易出错。但是当出现问题时,可能会造成很大的破坏,而且通常很难定位到错误的代码行。PyTorch提供更直接的调试体验,无需担心模型的复杂性。此外,当您怀疑出现问题时,您可以查找PyTorch存储库以获取可读代码。结语PyTorch:调试能力更强Keras:调试简单网络需求的(潜在)频率更低六、KerasvsPyTorch:导出模型和跨平台移植性在生产环境中,导出部署自己训练好的有什么优势模型选择——PyTorch将模型保存在基于Python且不可移植的Pickles中,而Keras利用JSON+H5文件格式以获得更安全的方法(尽管在Keras中保存自定义层通常更加困难)。另一方面,Keras也有一个R语言接口,如果你和一个使用R语言的数据分析师团队一起工作,那么你就会用到它。Keras在TensorFlow上运行,这意味着它有更多选项可以使用TensorFlowforMobile和TensorFlowLite部署到移动平台。您编写的Web应用程序也可以通过TensorFlow.js或Keras.js部署到Web上。例如,您可以查看这个检测密集恐惧症触发器的深度学习浏览器插件:https://github.com/cytadela8/trypophobia。PyTorch模型的导出过程由于其Python代码的限制比较费力,目前普遍采用的方法是先使用ONNX将PyTorch模型转换为Caffe2形式。结论Keras胜出:它有更多部署选项(直接通过TensorFlow后端),模型导出更简单。7.KerasvsPyTorch:性能DonaldKnuth有一句名言:不成熟的优化是编程中万恶之源(至少是大多数)。在大多数情况下,基准测试中的速度差异不应成为框架选择的主要标准——尤其是在学习阶段。GPU时间显然比其数据科学家的时间便宜得多。此外,在学习过程中,性能瓶颈主要是由失败的实现、未优化的网络和数据加载引起的,而不是框架本身的速度。当然,为了做一个完整的对比,还是要介绍一下这方面的。这里推荐两个性能对比结果:WojtekRosiński的《TensorFlow, Keras and PyTorch Comparison》:https://wrosinski.github.io/deep-learning-frameworks/微软的《Comparing Deep Learning Frameworks: A Rosetta Stone Approach》:https://github.com/ilkarman/DeepLearningFrameworks/PyTorchas与TensorFlow一样快,与通常较慢的Keras相比,循环神经网络可能更快。正如第一篇文章的作者所指出的:大多数时候,高性能框架(即PyTorch和TensorFlow)的计算效率优势被Keras提供的快速开发环境和易于实验所抵消。结论:就训练速度而言,PyTorch胜过KerasEight,KerasvsPyTorch:比较总结Keras和PyTorch都是深度学习框架初学者的绝佳选择。如果你是数学家、研究员或者想了解模型的本质,那么你可以考虑选择PyTorch。当需要更高级的定制和调试时(例如使用YOLOv3或带有注意力的LSTM进行对象检测),或者当我们需要优化数组表达式而不是神经网络时(例如矩阵分解或word2vec算法),PyTorch确实很棒。如果你想要一个即插即用的框架,Keras绝对是更容易的选择:快速构建、训练和评估模型,而无需在数学实现上花费太多时间。深度学习核心概念的知识是可以转移的。一旦您在一个环境中掌握了基础知识,您就可以应用所学知识并掌握新的深度学习库。我们鼓励您在Keras和PyTorch中尝试简单的深度学习模型。原文链接:https://deepsense.ai/keras-or-pytorch/【本文为专栏组织《机器之心》原创文章,微信公众号《机器之心(id:almosthuman2014)》]点此查看该作者更多好文
