深度学习框架 Keras 与 PyTorch 对比
对于许多科学家、工程师和开发人员来说,TensorFlow 是他们的第一个深度学习框架。TensorFlow 1.0 于 2017 年 2 月发布,可以说,它对用户不太友好。
在过去的几年里,两个主要的深度学习库 Keras 和 PyTorch 获得了大量关注,主要是因为它们的使用比较简单。
本文将介绍 Keras 与 PyTorch 的 4 个不同点以及为什么选择其中一个库的原因。
Keras
Keras 本身并不是一个框架,而是一个位于其他深度学习框架之上的高级 API。目前它支持 TensorFlow、Theano 和 CNTK。
Keras 的优点在于它的易用性。这是迄今为止最容易上手并快速运行的框架。定义神经网络是非常直观的,因为使用 API 可以将层定义为函数。
PyTorch
PyTorch 是一个深度学习框架(类似于 TensorFlow),由 Facebook 的人工智能研究小组开发。与 Keras 一样,它也抽象出了深层网络编程的许多混乱部分。
就高级和低级代码风格而言,PyTorch 介于 Keras 和 TensorFlow 之间。比起 Keras 具有更大的灵活性和控制能力,但同时又不必进行任何复杂的声明式编程 (declarative programming)。
深度学习的从业人员整天都在纠结应该使用哪个框架。一般来说,这取决于个人喜好。但是在选择 Keras 和 PyTorch 时,你应该记住它们的几个方面。
1. 定义模型的类与函数
为了定义深度学习模型,Keras 提供了函数式 API。使用函数式 API,神经网络被定义为一系列顺序化的函数,一个接一个地被应用。例如,函数定义层 1 的输出是函数定义层 2 的输入。
img_input = layers.Input(shape=input_shape)
x = layers.Conv2D(64, (3, 3), activation='relu')(img_input)
x = layers.Conv2D(64, (3, 3), activation='relu')(x)
x = layers.MaxPooling2D((2, 2), strides=(2, 2))(x)
在 PyTorch 中,你将网络设置为一个继承自 Torch 库的 torch.nn.Module 的类。与 Keras 类似,PyTorch 提供给你将层作为构建块的能力,但是由于它们在 Python 类中,所以它们在类的 __init__() 方法中被引用,并由类的 forward() 方法执行。
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 64, 3)
self.conv2 = nn.Conv2d(, , )
.pool = nn.MaxPool2d(, )
():
x = F.relu(.conv1(x))
x = .pool(F.relu(.conv2(x)))
x
model = Net()


