谁是第一学习深度学习框架

我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。

「第一个深度学习框架该怎么选」对于初学者而言一直是个头疼的问题。本文中,来自 deepsense.ai 的研究员给出了他们在高级框架上的答案。在 Keras 与 PyTorch 的对比中,作者还给出了相同神经网络在不同框架中性能的基准测试结果。目前在 GitHub 上,Keras 有超过 31,000 个 Stars,而晚些出现的 PyTorch 已有近 17,000 个 Stars。

值得一提的是,尽管在 4 月底 PyTorch 在 0.4 版本中已经加入了对于 Windows 的支持,但其对比 Keras 与 TensorFlow 在 Windows 上的稳定性还略有差距。

两大框架的链接:

Keras:https://github.com/keras-team/keras (https://keras.io/)

PyTorch:https://github.com/pytorch/pytorch

你想学习深度学习吗?是要将深度学习应用到业务中,还是用深度学习开展副业,抑或只是为了得到一些适合市场需求的技能?无论目标是什么,选择合适的深度学习框架是达到目标的第一步。

我们强烈建议你选择 Keras 或 PyTorch。它们都是非常强大的工具,且不管是学习还是实验都很有乐趣。我们是从教师和学生的角度考虑的。本文作者 Piotr 在企业举办过 Keras 和 PyTorch 研讨会,Rafał则正在学习这两种框架。

一、简介

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

Keras 是能够在 TensorFlow、CNTK、Theano 或 MXNet 上运行的高级 API(或作为 TensorFlow 内的 tf.contrib)。Keras 于 2015 年 3 月首次发布,之后即因其易用性和语法简洁性而受到支持,得到快速发展。Keras 是谷歌支持的一款框架。

PyTorch 于 2017 年 1 月对外发布,是专注于直接处理数组表达式的较低级别 API。去年它受到了大量关注,成为学术研究和需要优化自定义表达式的深度学习应用偏好的解决方案。它是 Facebook 支持的一款框架。

在讨论二者的具体细节之前,我们想先说明:对于「哪一个框架更好」这个问题我们没有直接明了的答案。选择哪一个框架最终取决于你的技术背景、需求和期望。本文旨在帮助你更好地了解何时应该选择 Keras 或 PyTorch。

一句话总结:Keras 更容易学习和用标准层进行实验,即插即用;PyTorch 提供一种较低级别的方法,对于更具备数学背景的用户来讲灵活性更强。

二、所以说为何不用其他框架呢?

本文不讨论选择 TensorFlow 作为首选深度学习框架的优劣势,因为我们认为 TensorFlow 与 Keras(TensorFlow 的官方高级库)和 PyTorch 相比对于新手不够友好。尽管你可以找到一些 Theano 教程,但它已不再处于活跃开发状态。Caffe 缺少灵活性,Torch 使用 Lua 语言(然而其重写非常难:))。MXNet、Chainer 和 CNTK 目前应用不那么广泛。

三、Keras vs PyTorch:易用性和灵活性

Keras 和 PyTorch 的运行抽象层次不同。

Keras 是一个更高级别的框架,将常用的深度学习层和运算封装进干净、乐高大小的构造块,使数据科学家不用再考虑深度学习的复杂度。

PyTorch 提供一个相对较低级别的实验环境,使用户可以更加自由地写自定义层、查看数值优化任务。当你可以使用 Python 的全部能量,访问使用的所有函数的核心,则复杂架构的开发更加直接。这自然会以冗长为代价。

下面用在 Keras 和 PyTorch 中定义的简单卷积网络来对二者进行对比:

1. 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’))

2. 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()

上述代码片段显示了两个框架的些微不同。至于模型训练,它在 PyTorch 中需要大约 20 行代码,而在 Keras 中只需要一行。GPU 加速在 Keras 中可以进行隐式地处理,而 PyTorch 需要我们指定何时在 CPU 和 GPU 间迁移数据。

如果你是新手,那么 Keras 作为更高级别的框架可能具备明显优势。Keras 确实可读性更强,更加简练,允许用户跳过一些实现细节,更快地构建自己的第一个端到端深度学习模型。但是,忽略这些细节会限制用户探索深度学习流程中每个计算模块内在工作原理的机会。使用 PyTorch 会提供更多机会,来更深入地思考深度学习核心概念,如反向传播以及其他训练过程。

也就是说,Keras 虽然比 PyTorch 简单得多,但它绝不是「玩具」,它是初学者以及经验丰富的数据科学家使用的正经深度学习工具。

例如,在 DSTL 卫星图像特征检测 Kaggle 竞赛中,最优秀的 3 支队伍的解决方案都使用了 Keras,第四名(deepsense.ai 队伍)使用了 PyTorch 和 Keras。

你的深度学习应用所需的灵活性是否超出 Keras 能够提供的灵活性值得考虑。根据你的需求,遵循 Rule of least power,Keras 可能是最完美的解决方案。

3. 结论

Keras:更简练,更简单的 API

PyTorch:更灵活,鼓励用户更深入地理解深度学习概念

四、Keras vs PyTorch:流行度和可获取学习资源

框架流行度不仅代表了易用性,社区支持也很重要——教程、代码库和讨论组。截至 2018 年 6 月,Keras 和 PyTorch 的流行度不断增长,不管是 GitHub 还是 arXiv 论文(注意大部分提及 Keras 的论文也提到它的 TensorFlow 后端)。根据 KDnuggets 调查,Keras 和 PyTorch 是增长最快的数据科学工具。

猜你喜欢

转载自blog.csdn.net/fenghuo9527/article/details/81087853
今日推荐