查看原文
其他

Keras与PyTorch全方位比较 哪一个深度学习框架更适合初学者?

52CV.NET 我爱计算机视觉 2019-03-29

Keras或PyTorch作为您的第一个深度学习框架

你想学习深度学习吗?无论您是想开始将其应用于您的业务,建立您的下一个项目,还是仅仅获得当下热门的技能 – 选择合适的深度学习框架来学习是实现目标的关键第一步。

我们强烈建议您选择Keras或PyTorch。这些功能强大的工具可让您学习和实验。我们从老师和学生的角度都了解他们。

介绍

Keras和PyTorch是深度学习的开源框架,深受数据科学家的欢迎。

  • Keras是一种高级API,可以在TensorFlow,CNTK,Theano或MXNet上运行(或者在TensorFlow中运行tf.contrib)。自2015年3月首次发布以来,它的易用性和语法简单性得到了青睐,促进了快速发展。它得到了Google的支持。

  • PyTorch于2016年10月发布,是一款专注于直接处理数组表达式的低级API。它在去年获得了巨大的兴趣,成为学术研究的首选解决方案,以及需要优化定制表达的深度学习应用。它受Facebook支持。

在我们讨论这两个框架的细节(在这个Reddit主题中有详细描述)之前,我们希望先发制人让你失望 – 对’哪个更好?’没有直接的答案。选择最终归结于您的技术背景,需求和期望。本文旨在让您更好地了解您应该选择哪一个作为第一个框架。

TL; DR:

以即插即用的精神,Keras可能更容易进入标准图层并进行实验。

PyTorch为更具数学倾向的用户提供了更低层次的方法和更多的灵活性。

好吧,但为什么没有其他框架?

本文不会讨论选择纯TensorFlow作为您的第一个深度学习框架的优缺点,因为我们认为与Keras(TF的官方高级库)和PyTorch相比,TensorFlow不太适合初学者。虽然您可能会找到一些Theano教程,但它不再处于积极的发展阶段。Caffe缺乏灵活性,而Torch使用Lua(虽然它的重写太棒了:))。MXNet,Chainer和CNTK目前尚未广泛流行。

Keras与PyTorch:易用性和灵活性

Keras和PyTorch在操作抽象级别方面有所不同。

Keras是一个更高层次的框架,将常用的深度学习层和操作包装成整齐的乐高大小的构建块中,让人忘掉深度学习背后的复杂性。

PyTorch为实验提供了一个相对较低级别的环境,使用户可以更自由地编写自定义图层并查看数值优化任务的底层。当您可以使用Python的全部功能并访问所使用的所有功能的内核时,开发更复杂的体系结构更为直接。自然,这是以冗长的代价。

考虑一下在Keras和PyTorch中如何定义一个简单的卷积网络的比较:

Keras

model = 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'))

PyTorch

class Net(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)def forward(self, x):x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 6 * 6) x = F.log_softmax(self.fc1(x), dim=-1)return x model = Net()

上面的代码片段略微体会了两种框架之间的差异。至于模型训练本身 – 在PyTorch中需要大约20行代码,而Keras中只需要一行代码。启用GPU加速在Keras中是隐式处理的,而PyTorch要求我们指定何时在CPU和GPU之间传输数据。
如果你是初学者,Keras的高层可能看起来是一个明显的优势。Keras确实更具可读性和简洁性,使您可以更快地构建您的第一个端到端深度学习模型,同时跳过实现细节。然而,对这些细节的讨论限制了在深度学习过程中探索每个计算块的内部运作的机会。使用PyTorch可以为您提供更多关于核心深度学习概念的想法,如反向传播和其他训练过程。

也就是说,Keras比PyTorch简单得多,但它绝不是玩具 – 这是初学者和经验丰富的数据科学家都喜欢的的深度学习工具。
例如,在Dstl卫星影像特征检测Kaggle比赛中,最好的三支队伍在他们的解决方案中都使用了Keras,而deepsense.ai队(第四名)使用了PyTorch和(较少的)Keras组合。

值得考虑的是,你的深度学习的应用是否需要灵活性超过纯Keras所提供的灵活性。根据您的需求,keras可能只是 the rule of least power甜蜜点。

总结

  • Keras – 更简洁,更简单的API

  • PyTorch – 更灵活,鼓励更深入地了解深度学习概念

Keras与PyTorch:社区人气和获取学习资源

框架的普及不仅是其可用性的代表。这对于社区支持也很重要 – 教程,带有工作代码的存储库和讨论组。截至2018年6月,Keras和PyTorch在GitHub和arXiv论文上都受到越来越多的欢迎(请注意,大多数提及Keras的论文也提及其TensorFlow后端)。根据KDnuggets的调查,Keras 和 PyTorch是增长最快的数据科学工具

虽然这两个框架都有令人满意的文档,但PyTorch享有更强大的社区支持 – 如果您遇到困难(您将陷入困境),它们的讨论板是访问的好地方,而文档或StackOverflow不会为您提供所需的答案。

有趣的是,我们在给定的网络架构上发现了具有注释的初学者级别的深度学习课程,这些课程对于Keras来说比PyTorch更容易实现,使得Keras对于初学者更容易访问。代码的可读性和Keras提供的无与伦比的实验易用性可能会使其深受广大深度学习爱好者,教师和铁杆Kaggle获奖者的广泛欢迎。

大量的Keras资源和深度学习课程的例子,请参阅 “Starting deep learning hands-on: image classification on CIFAR-10“ 和Keras 的创造者François Chollet编写的 “Deep Learning with Python” 一书。对于PyTorch资源,我们推荐官方教程,它提供了一个更具挑战性,更全面的方法来学习神经网络的内部工作。

总结

  • Keras – 丰富的教程和可重复使用的代码

  • PyTorch – 卓越的社区支持和积极的发展

Keras与PyTorch:调试与代码检查

Keras在抽象中封装了大量计算块,因此难以确定导致bug的确切代码。
PyTorch作为更为详细的框架,可以让我们逐行执行我们的脚本。这就像调试NumPy一样 – 我们可以轻松访问代码中的所有对象,并且可以使用打印语句(或任何标准的Pythonic调试)来查看运行失败的位置。
创建标准网络的Keras用户比PyTorch用户出错的机会少一个数量级。但是一旦出现问题,它就会受到很大的伤害,而且往往很难找到出错的实际代码行。无论模型的复杂性如何,PyTorch都提供了更加直接的,不绕弯的调试体验。此外,如果有疑问,您可以随时查找PyTorch repo以查看其可读代码。

总结

  • PyTorch – 更好的调试功能

  • Keras – (可能)不太需要调试简单网络

Keras与PyTorch:导出模型和跨平台可移植性

在生产中导出和部署训练的模型有哪些选择?

PyTorch将Pickles中的模型保存为基于Python的,不可移植的,而Keras利用JSON + H5文件的更安全的方法(尽管在Keras中保存自定义层通常更困难)。Keras支持R,以防需要使用R语言与数据分析师团队进行协作。

在Tensorflow上运行,Keras通过TensorFlow for MobileTensorFlow Lite享有更广泛的选择,可用于部署到移动平台。您可以使用TensorFlow.jskeras.js部署您的酷Web应用程序。作为一个例子,请看这个由Piotr和他的学生开发的深度学习驱动的浏览器插件,用于检测trypophobia触发器

导出PyTorch模型由于其Python代码而导致更多的开销,目前广泛推荐的方法是首先将您的PyTorch模型转换为使用ONNX的Caffe2

总结

  • Keras – 更多的部署选项(直接并且通过TensorFlow后端),更简单的模型导出。

Keras与PyTorch:性能

Donald Knuth说:

不成熟的优化是编程中所有邪恶(或至少大部分)的根源。

在大多数情况下,速度基准的差异不应该成为选择框架的主要标准,特别是正在学习时。GPU时间比数据科学家的时间便宜得多。而且,在学习的时候,性能瓶颈将由实验失败,网络未优化和数据加载造成; 而不是原始的框架速度。然而,为了完整性,我们不得不触及这个问题。我们推荐这两个比较:

  • TensorFlow, Keras and PyTorch comparisonby Wojtek Rosiński

  • Comparing Deep Learning Frameworks: A Rosetta Stone Approachby Microsoft

PyTorch速度与TensorFlow一样快,对于Recurrent Neural Networks可能更快。Keras一贯较慢。正如第一个比较的作者所指出的那样,高性能框架(即PyTorch和TensorFlow)的计算效率的提高在大多数情况下将超过快速开发环境以及Keras提供的实验易用性。

总结

  • 就训练速度而言,PyTorch胜过Keras

Keras与PyTorch:结论

Keras和PyTorch都是您第一个学习的深度学习框架的绝佳选择。
如果你是一位数学家,研究人员或者倾向于理解你的模型真正在做什么,那么就考虑选择PyTorch。它真的很优秀,特别是当你需要更高级的定制(及其调试)(e.g. object detection with YOLOv3 or LSTMs with attention),或者当我们需要优化除神经网络以外的数组表达式(例如矩阵分解word2vec算法)时。

如果您需要即插即用框架,Keras毫无疑问是更简单的选择:快速构建,训练和评估模型,而无需花费太多时间在数学实现细节上。

关于深度学习的核心概念的知识是可以迁移的。一旦掌握了一个环境中的基础知识,就可以将它们应用到其他地方,并在您转换到新的深度学习库时可以立马上手。

欢迎访问我爱计算机视觉(www.52cv.net),获取更多计算机视觉与机器学习技术信息。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存