TensorFlow是众多科学家、工程师和开发者首选的深度学习框架。虽然TensorFlow1.0早在2017年2月就发布了,但在使用过程中并不是很人性化。在过去的几年中,Keras和PyTorch已经成为最受用户欢迎的两个深度学习库,因为它们比TensorFlow更易于使用。本文将分别对比Keras和PyTorch的四个方面。大家可以根据两种框架的优缺点和自己的需求选择其中一种。1.Keras和PyTorch简介Keras于2015年3月首次发布,是一种能够在TensorFlow、CNTK、Theano或MXNet(或TensorFlow中的tf.contrib)上运行的高级API。Keras的突出特点是它的易用性,它是迄今为止最容易快速启动和运行的框架。此外,Keras支持对神经网络进行直观定义,而函数式API的使用允许用户将层定义为函数。PyTorch于2016年10月发布,由FacebookAI研究团队开发,是一种专注于直接操作数组表达式的低级API。与Keras相比,你可以对PyTorch有更多的灵活性和控制力,同时你不需要做那么多的声明式编程。2.选择Keras还是PyTorch?有时深度学习从业者会纠结于使用哪个框架,这通常归结为个人偏好。下面将介绍Keras和PyTorch几个方面的对比,大家可以根据自己的情况做出选择。1.用于定义模型的类与函数Keras在定义深度学习模型时提供了函数式API。使用函数式API,神经网络被定义为一组顺序函数,然后一个接一个地应用这些函数。例如,函数定义层1的输出是函数定义层2的输入。使用PyTorch时,用户将神经网络设置为扩展torch.nn的类。Torch库中的模块。与Keras类似,PyTorch为用户提供层作为组件,但由于这些层属于Python类,因此它们在类的__init__()方法中被引用,并通过类的forward()方法执行。相比之下,PyTorch让您可以访问Python的所有分类功能,而不仅仅是简单的函数调用。定义网络变得更加清晰和优雅。但是,如果尽可能快地编写网络代码对您来说至关重要,那么Keras对您来说更容易使用。2.张量和计算图vs标准数组对于普通程序员来说,KerasAPI隐藏了很多令人困惑的细节,定义网络层也非常直观。因此,您已经可以开始使用默认设置了。但是当你想实现一个非常高级或“独特”的模型时,你真的需要了解底层和必要的TensorFlow。但是当你真正深入研究底层TensorFlow代码时,就会遇到一些挑战。您需要确保所有矩阵乘法都是对齐的。甚至不要考虑打印层输出,因为您将向终端打印一个漂亮的Tensor定义。PyTorch在这些方面往往比Keras更宽容。你只需要知道每一层的输入和输出大小,PyTorch在这方面做得很好,你可以很快掌握。您不需要构建抽象计算图(调试时看不到的内部结构)。PyTorch的另一个优点是它的平滑性,你可以在Torch张量和Numpy矩阵之间来回切换。但如果开发者需要实现一些自定义内容,在TF张量和Numpy矩阵之间切换会很麻烦,这需要他们对TensorFlow有透彻的了解。其实PyTorch的交互操作更简单,只需两步:将Torch张量(可变对象)转换成Numpy,然后进行逆向操作。当然,如果您不需要实施任何独特的东西,Keras也很棒,因为您不会遇到任何TensorFlow障碍。但如果你想实现一些独特的东西,PyTorch可能会表现得更流畅。3.训练模型开始训练使用Keras训练模型超级简单!你只需要一个简单的.fit(),就可以开启模型训练之旅。使用PyTorch训练模型涉及以下步骤:在每批训练开始时初始化梯度在模型中运行前向传播运行反向传播计算损失和更新权重所以,在训练模型方面,PyTorch是比较繁琐的。4.为了控制CPU与GPU模式,我们需要更多的计算能力。如果您安装了tensorflow-gpu,则默认情况下会启用并完成在Keras中使用GPU。然后,如果你想将一些操作卸载到CPU,你可以在一行中完成。但是对于PyTorch,您必须为每个火炬张量和numpy变量显式启用GPU。这段代码会比较混乱。而如果你想在CPU和GPU之间来回移动来执行不同的计算,就很容易出错。例如,为了将之前的模型转移到GPU上运行,需要以下步骤:Keras因此在简单性和默认设置方面优于PyTorch。3.选择Keras或PyTorch的一般建议笔者通常建议初学者从Keras入手。Keras绝对是最容易理解和使用的框架,您可以快速上手运行。您无需担心GPU设置、处理抽象代码以及任何其他复杂的事情。您甚至可以在不接触任何一行TensorFlow代码的情况下实现自定义层和损失函数。但是,如果您开始深入研究深度网络的更细粒度层或正在实施非标准的东西,PyTorch是您的首选库。使用PyTorch需要一些额外的工作,但它不会减慢您的进程。您仍然可以快速实施、训练和测试网络,并具有易于调试的额外好处。参考链接:https://towardsdatascience.com/keras-vs-pytorch-for-deep-learning-a013cb63870d【本文为机器之心专栏原文翻译,微信公众号“机器之心”(id:almosthuman2014)”]点此阅读更多本作者好文
