对比复现34个预训练模型,PyTorch和Keras你选谁?

作者:CQITer小编 时间:2019-03-11 01:53

字号

Keras 和 PyTorch 当然是对初学者最友好的深度学习框架,它们用起来就像描述架构的简单语言一样,告诉框架哪一层该用什么。这样减少了很多抽象工作,例如设计静态计算图、分别定义各张量的维度与内容等等。

但是,到底哪一个框架更好一点呢?当然不同的开发者和研究者会有不同的爱好,也会有不同的看法。本文主要从抽象程度和性能两个方面对比 PyTorch 与 Keras,并介绍了一个新的基准,它复现并对比了两个框架的所有预训练模型。

在 Keras 和 PyTorch 基准项目中,MIT 在读博士 Curtis G. Northcutt 复现了 34 个预训练模型。该基准结合了 Keras 和 PyTorch,并将它们统一到一个框架内,这样我们就能知道这两个框架的对比结果,知道不同模型用什么框架好。例如,项目作者表示 ResNet 架构的模型使用 PyTorch 要比 Keras 效果好,Inception 架构的模型使用 Keras 又要比 PyTorch 好。

Keras 和 PyTorch 基准项目:https://github.com/cgnorthcutt/benchmarking-keras-pytorch

一、两大框架的性能与易用性

作为 TensorFlow 的高度封装,Keras 的抽象层次非常高,很多 API 细节都隐藏了起来。虽然 PyTorch 比 TensorFlow 的静态计算图更容易使用,但总体上 Keras 隐藏的细节更多一些。而对于性能,其实各框架都会经过大量的优化,它们的差别并不是很明显,也不会作为主要的选择标准。

1. 易用性

Keras 是一个更高级别的框架,将常用的深度学习层和运算封装进便捷的构造块,并像积木一样搭建复杂模型,开发者和研究者不需要考虑深度学习的复杂度。

PyTorch 提供一个相对较低级别的实验环境,使用户可以更加自由地编写自定义层、查看数值优化任务等等。例如在 PyTorch 1.0 中,编译工具 torch.jit 就包含一种名为 Torch Script 的语言,它是 Python 的子语言,开发者使用它能进一步对模型进行优化。

我们可以通过定义简单的卷积网络看看两者的易用性:

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

如上所示为 Keras 的定义方式,很多时候运算都会作为参数嵌入到 API 中,因此代码会显得非常简洁。如下所示为 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))) 

        xx = x.view(-1, 16 * 6 * 6) 

        x = F.log_softmax(self.fc1(x), dim=-1) 

 

        return x 

 

model = Net() 

虽然 Keras 感觉比 PyTorch 更易于使用,但两者的差别不大,都期望模型的编写能更便捷。

2. 性能

目前有很多对比各框架性能的实验都表明 PyTorch 的训练速度相比 Keras 会快一些。如下两张图表展示了不同框架在不同硬件和模型类型的表现:

对比复现34个预训练模型,PyTorch和Keras你选谁?

对比复现34个预训练模型,PyTorch和Keras你选谁?

下面两张同样展示了不同模型在 PyTorch 和 Keras 框架下的性能,这两份 18 年的测试都表明 PyTorch 的速度要比 Keras 快那么一点点。

对比复现34个预训练模型,PyTorch和Keras你选谁?

对比复现34个预训练模型,PyTorch和Keras你选谁?

这两份对比细节可查阅:

https://github.com/ilkarman/DeepLearningFrameworks/

https://wrosinski.github.io/deep-learning-frameworks/

二、Keras 和 PyTorch Benchmark

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接