0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对比Keras和PyTorch四个方面的不同

DPVg_AI_era 来源:lq 2019-06-29 09:20 次阅读

Keras和PyTorch变得极为流行,主要原因是它们比TensorFlow更容易使用。本文对比了Keras和PyTorch四个方面的不同,读者可以针对自己的任务来选择。

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

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

Keras本身不是框架,而是一个位于其他Deep Learning框架之上的高级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代码:

class Net(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) def forward(self, x): x = F.relu(self.conv1(x)) x = self.pool(F.relu(self.conv2(x))) return xmodel = Net()

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

张量、计算图与标准阵列

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

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

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

PyTorch的另一个优势是可以在Torch Tensors和Numpy阵列之间来回切换。而反观TF,如果需要实现自定义的东西,在TF张量和Numpy阵列之间来回转换可能会很麻烦,需要开发人员对TensorFlow会话有充分的了解。

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

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

训练模型

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

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

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

在每批训练开始时初始化梯度

运行正向传递模式

运行向后传递

计算损失并更新权重

for epoch in range(2): # loop over the dataset multiple times running_loss = 0.0 for i, data in enumerate(trainloader, 0): # Get the inputs; data is a list of [inputs, labels] inputs, labels = data # (1) Initialise gradients optimizer.zero_grad() # (2) Forward pass outputs = net(inputs) loss = criterion(outputs, labels) # (3) Backward loss.backward() # (4) Compute the loss and update the weights optimizer.step()

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

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

控制CPUGPU模式

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

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

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

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

# Get the GPU devicedevice = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")# Transfer the network to GPUnet.to(device)# Transfer the inputs and labels to GPUinputs, labels = data[0].to(device), data[1].to(device)

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

选择框架的建议

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 深度学习
    +关注

    关注

    73

    文章

    5462

    浏览量

    120875
  • keras
    +关注

    关注

    2

    文章

    20

    浏览量

    6075
  • pytorch
    +关注

    关注

    2

    文章

    802

    浏览量

    13110

原文标题:深度学习框架如何选?4大场景对比Keras和PyTorch

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    esd,mcu和adc复位问题的必须要注意的四个方面!

    esd,mcu和adc复位问题的必须要注意的四个方面https://bbs.elecfans.com/jishu_1450674_1_1.html
    发表于 11-28 16:58

    印制电路板设计四个方面的要求

      对于印制电路板的设计要求,通常要从正确性、可靠性、工艺性、经济性四个方面进行考虑。制板要求不同,加工复杂程度也就不同。因此,要根据产品的性质、所处的阶段(研制、试制、生产),相应地制定印制电路板的设计要求。
    发表于 09-04 16:11

    S32G-GoldVip上的Pytorch和Tensorflow如何启用?

    大家好,我想在 Goldbox 上运行我的 ML 模型,我看到 Goldvip 有一可用的库 eIQ Auto,它提供内部使用 Tensorflow 的 Pytorch/Keras 2.x,请帮助我了解这些库在哪里可用以及如何
    发表于 03-30 07:05

    TCO在CRT方面的对比

    TCO在CRT方面的对比 随着时间的发展,原有的TCO99标准已经难以适应新的LCD、PDP等采用新式显示技术的显示器。于是TCO联盟开始制定最新的TCO03标准,
    发表于 12-26 17:06 831次阅读

    TCO在LCD方面的对比

    TCO在LCD方面的对比 随着时间的发展,原有的TCO99标准已经难以适应新的LCD、PDP等采用新式显示技术的显示器。于是TCO联盟开始制定最新的TCO03标准,
    发表于 12-26 17:10 874次阅读

    总结了区块链技术的四个方面来了解区块链

    是的,区块链是正经技术,对于这个技术,颇多赞美之词。但是,在赞美之余,我还是想泼几杯冷水。区块链很美,但也有美中不足之处,我大致总结了四个方面
    的头像 发表于 01-22 15:48 6090次阅读

    2018年智能锁行业的问题大致总结为以下四个方面

    最近,对智能锁行业进行了年终调研,根据企业的反应,智能锁行业的问题大致总结为以下四个方面
    发表于 01-02 10:07 1079次阅读

    高频PCB设计中,工程师需考虑四个方面带来的干扰问题并给解决方案

    在高频PCB设计中,工程师需要考虑电源噪声、传输线干扰、耦合、电磁干扰(EMI)四个方面的干扰问题。接下来,我们结合工作中的实践,给出有效的解决方案。
    的头像 发表于 07-18 08:55 3542次阅读

    四个方面解读PCB射频电路基础特性及重要因素

    此处将从射频界面、小的期望信号、大的干扰信号、相邻频道的干扰四个方面解读射频电路大基础特性,并给出了在 PCB 设计过程中需要特别注意的重要因素。
    发表于 08-07 14:42 918次阅读

    无锡市集成电路产业四个方面的特点

    半导体行业协会常务副理事长于燮康用“乘风破浪”来概括无锡市集成电路产业发展所取得的成绩。 于燮康总结了无锡市集成电路产业四个方面的特点。   一是,产业规模实力厚实,处于国内“第一军团”。无锡市集成电路产业起步于二十世纪八十年代,
    的头像 发表于 02-05 15:59 1.1w次阅读

    四个方面区分MPK和CBB电容资料下载

    电子发烧友网为你提供四个方面区分MPK和CBB电容资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 03-27 08:44 23次下载
    <b class='flag-5'>四个</b><b class='flag-5'>方面</b>区分MPK和CBB电容资料下载

    四个方面看SoC 设计资料下载

    电子发烧友网为你提供四个方面看SoC 设计资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-27 08:43 8次下载
    <b class='flag-5'>四个</b><b class='flag-5'>方面</b>看SoC 设计资料下载

    物联网技术在四个方面的应用趋势分析

      iGS320基于超低功耗 u-blox M10 标准精密 GNSS 平台,通过同时跟踪多达四个 GNSS 星座的卫星,提供最大覆盖范围和可靠的定位精度。
    的头像 发表于 05-30 16:52 1318次阅读

    示波器经常说“四个部分”是哪四个部分?

    在学习使用示波器之前,了解示波器的结构很重要,毕竟知己知彼,方能百战百胜嘛!安泰维修记得在很早之前就听过很多“你要先去了解示波器的四个部分”、“在学习之前你要先弄懂示波器那四个部分再去学……”等
    的头像 发表于 10-19 17:03 1778次阅读
    示波器经常说“<b class='flag-5'>四个</b>部分”是哪<b class='flag-5'>四个</b>部分?

    提升驾驶体验的四个技术趋势

    提升驾驶体验的四个技术趋势
    发表于 11-01 08:27 0次下载
    提升驾驶体验的<b class='flag-5'>四个</b>技术趋势