首页游戏攻略深度学习框架如何选?4大场景对比Keras和PyTorch

深度学习框架如何选?4大场景对比Keras和PyTorch

misa2 03-27 3次浏览 0条评论

新智元报道

编辑:元子

【新智元导读】Keras和Pytorch变得极为时髦,主要原因是它们比TensorFlow更轻易使用。本文对比了Keras和Pytorch四个方面的不同,读者可以针对自己的任务来抉择。

对于许多科学家、工程师和开发人员来说,TensorFlow是他们的第一个深度学习框架。但indus.ai公司机器学习工程师GeorgeSeif认为,TF并不是非常的用户友好。

相比TF,Seif认为Keras和PyTorch比TensorFlow更易用,已经获得了浩大的普及。

Keras本身不是框架,而是一个位于其他DeepLearning框架之上的高级API。目前它支持TensorFlow,Theano和CNTK。Keras是迄今为止启动和运行最快最简单的框架。定义神经网络是直看的,使用功能性API答应人们将层定义为函数。

而PyTorch像Keras一样,它也抽象了深度网络编程的大部分紊乱部分。PyTorch介于Keras和TensorFlow之间,比Keras拥有更灵巧、更好的掌握力,与此同时用户又不必做任何疯狂的声明式编程。

深度学习练习者整天都在争论应该使用哪个框架。接下来我们将通过4个不同方面,来对比Keras和PyTorch,最终初学者会明白应该选谁。

用于定义模型的类与函数

Keras提供功能性API来定义深度学习模型。神经网络被定义为一组顺序函数,功能定义层1的输出是功能定义层2的输进,例如下面demo代码:

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,PyTorch答应用户访问所有Python的类功能而不是简单的函数调用。与Keras类似,PyTorch提供了层作为构建块,但由于它们位于Python类中,因此它们在类的__init__()方法中引用,并由类的forward()方法执行。例如下面demo代码:

classNet(nn.Module):def__init__(self):super(Net,self).__init__()self.conv1=nn.Conv2d(3,64,3)self.conv2=nn.Conv2d(64,64,3)self.pool=nn.MaxPool2d(2,2)defforward(self,x):x=F.relu(self.conv1(x))x=self.pool(F.relu(self.conv2(x)))returnxmodel=Net()

所以假如你想更清楚、更优雅地定义网络,可以抉择PyTorch;假如只是求快好上手,可以抉择Keras。

张量、计算图与准则阵列

KerasAPI隐躲了编码器的许多紊乱细节。定义网络层非常直看,默认设置已经足以应付大部分情状,不需要涉及到非常底层的内容。

而当你真正触达到更底层的TensorFlow代码时,同时你也获得了随之而来的最具有挑战性的部分:你需要确保所有矩阵乘法都排成一行。哦对了,甚至别指看打印出图层的一个输出,因为你只会在终端上打印出一个漂亮的Tensor定义。

相比起来,PyTorch在这些方面就做的更让人欣慰一些。你需要知道每个层的输进和输出大小,但这很快就能把握。同时你也不必处理构建一个无法在调试中看到的抽象计算图。

PyTorch的另一个优势是可以在TorchTensors和Numpy阵列之间往返切换。而反看TF,假如需要实现自定义的东西,在TF张量和Numpy阵列之间往返转换可能会很麻烦,需要开发人员对TensorFlow会话有足够的了解。

PyTorch上这种操作实际上要简单得多。你只需要知道两个操作:一个将TorchTensor(一个Variable对象)切换到Numpy,另一个反过来。

当然,假如不需要实现任何花哨的东西,那么Keras会做得很好,因为你不会碰到任何TensorFlow路障。

练习模型

在Keras上练习模型非常轻易!一个简单的.fit()走四方。下面是demo代码:

history=model.fit_generator(generator=train_generator,epochs=10,validation_data=validation_generator)

但在PyTorch中练习模型就费点事了,包括几个步骤:

在每批练习开始时初始化梯度运行正向传递模式运行向后传递计算缺失并更新权重

forepochinrange(2):#loopoverthedatasetmultipletimesrunning_loss=0.0fori,datainenumerate(trainloader,0):#Gettheinputs;dataisalistof[inputs,labels]inputs,labels=data#(1)Initialisegradientsoptimizer.zero_grad()#(2)Forwardpassoutputs=net(inputs)loss=criterion(outputs,labels)#(3)Backwardloss.backward()#(4)Computethelossandupdatetheweightsoptimizer.step()

你看看,就运行个练习就得这么多步骤!

我想这样你总能意识到发生了什么。同时,由于这些模型练习步骤在练习不同模型时基本保持不变,因此非常不必要。

掌握CPU与GPU模式

假如安装了tensorflow-gpu,默认情状下在Keras中启用并完成使用GPU。然后,假如期看将某些操作移动到CPU,则可以使用单行操作。

withtf.device('/cpu:0'):y=apply_non_max_suppression(x)

在PyTorch就得费点劲,你必须为每个Torch张量和numpy变量明确启用GPU。假如在CPU和GPU之间往返切换以进行不同的操作,就会使代码变得紊乱并且轻易出错。

例如,要将我们以前的模型转移到GPU上运行,我们必须执行以下操作:

#GettheGPUdevicedevice=torch.device("cuda:0"iftorch.cuda.is_available()else"cpu")#TransferthenetworktoGPUnet.to(device)#TransfertheinputsandlabelstoGPUinputs,labels=data[0].to(device),data[1].to(device)

在GPU这块,Keras凭借其简洁和漂亮的默认设置赢得了胜利。

抉择框架的意见

Seif通常给出的意见是从Keras开始,究竟又快、又简单、又好用!你甚至可以执行自定义图层和缺失函数的操作,而无需触及任何一行TensorFlow。

但假如你确实开始深进了解深层网络中更细粒度的方面,或者正在实现非准则的东西,那么PyTorch就是首选库。

参考链接:

另一个伊甸初始四星选哪个
《大侠立志传》图文攻略 上手指南及开局攻略 豆瓣好评爆表!没想到,2023年赵本山会以这种方式,甩出王炸
相关内容
发表评论

游客 回复需填写必要信息