对于许多科学家、工程师和开发人员来说,TensorFlow是他们的第一个深度学习框架。TensorFlow 1.0于2017年2月发布,可以说,它对用户不太友好。

在过去的几年里,两个主要的深度学习库KerasPytorch获得了大量关注,主要是因为它们的使用比较简单。

本文将介绍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( function defining layer 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(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 x
model = Net()

(2)张量和计算图模型与标准数组的比较

Keras API向普通程序员隐藏了许多混乱的细节。这使得定义网络层是直观的,并且默认的设置通常足以让你入门。

只有当你正在实现一个相当先进或“奇特”的模型时,你才真正需要深入了解底层,了解一些基本的TensorFlow。

棘手的部分是,当你真正深入到较低级别的TensorFlow代码时,所有的挑战就随之而来!你需要确保所有的矩阵乘法都对齐。不要试着想打印出你自己定义的层的输出,因为你只会得到一个打印在你的终端上的没有错误的张量定义。

Pytorch在这些方面更宽容一些。你需要知道每个层的输入和输出大小,但是这是一个比较容易的方面,你可以很快掌握它。你不需要构建一个抽象的计算图,避免了在实际调试时无法看到该抽象的计算图的细节。

Pytorch的另一个优点是平滑性,你可以在Torch张量和Numpy数组之间来回切换。如果你需要实现一些自定义的东西,那么在TF张量和Numpy数组之间来回切换可能会很麻烦,这要求开发人员对TensorFlow会话有一个较好的理解。

Pytorch的互操作实际上要简单得多。你只需要知道两种操作:一种是将Torch张量(一个可变对象)转换为Numpy,另一种是反向操作。

当然,如果你从来不需要实现任何奇特的东西,那么Keras就会做得很好,因为你不会遇到任何TensorFlow的障碍。但是如果你有这个需求,那么Pytorch将会是一个更加好的选择。

(3)训练模型

用Keras训练模特超级简单!只需一个简单的.fit(),你就可以直接去跑步了。

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

在Pytorch中训练模型包括以下几个步骤:

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

  2. 前向传播

  3. 反向传播

  4. 计算损失并更新权重

# 在数据集上循环多次
for epoch in range(2):  
    for i, data in enumerate(trainloader, 0):
        # 获取输入; data是列表[inputs, labels]
        inputs, labels = data 
        # (1) 初始化梯度
        optimizer.zero_grad()          # (2) 前向传播
        outputs = net(inputs)
        loss = criterion(outputs, labels)         # (3) 反向传播
        loss.backward()
        # (4) 计算损失并更新权重
        optimizer.step()

光是训练就需要很多步骤!

我想这种方式你就会知道实际上发生了什么。由于这些模型训练步骤对于训练不同的模型本质上保持不变,所以这些代码实际上完全不必要的。

(4)控制CPU与GPU模式的比较

如果你已经安装了tensorflow-gpu,那么在Keras中使用GPU是默认启用和完成的。如果希望将某些操作转移到CPU,可以使用以下代码。

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

对于Pytorch,你必须显式地为每个torch张量和numpy变量启用GPU。这将使代码变得混乱,如果你在CPU和GPU之间来回移动以执行不同的操作,则很容易出错。

例如,为了将我们之前的模型转移到GPU上运行,我们需要做以下工作:

#获取GPU设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") #传送网络到GPU
net.to(device) # 传送输入和标签到GPU
inputs, labels = data[0].to(device), data[1].to(device)

Keras在这方面的优势在于它的简单性和良好的默认设置

选择框架的一般建议

我通常给出的建议是从Keras开始。

Keras绝对是最容易使用、理解和快速上手并运行的框架。你不需要担心GPU设置,处理抽象代码,或者做任何复杂的事情。你甚至可以在不接触TensorFlow的任何一行的情况下实现定制层和损失函数。

如果你确实开始深入到深度网络的更细粒度方面,或者正在实现一些非标准的东西,那么Pytorch就是你的首选库。在Keras上实现反而会有一些额外的工作量,虽然不多,但这会拖慢你的进度。使用pytorch能够快速地实现、训练和测试你的网络,并附带易于调试的额外好处!

欢迎关注磐创博客资源汇总站:

http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:

http://pytorch.panchuang.net/

深度学习框架Keras与Pytorch对比的更多相关文章

  1. 如何评价深度学习框架Keras?

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

  2. 基于Theano的深度学习框架keras及配合SVM训练模型

    https://blog.csdn.net/a819825294/article/details/51334397 1.介绍 Keras是基于Theano的一个深度学习框架,它的设计参考了Torch, ...

  3. 【深度学习框架】使用PyTorch进行数据处理

      在深度学习中,数据的处理对于神经网络的训练来说十分重要,良好的数据(包括图像.文本.语音等)处理不仅可以加速模型的训练,同时也直接关系到模型的效果.本文以处理图像数据为例,记录一些使用PyTorc ...

  4. 常用深度学习框架(keras,pytorch.cntk,theano)conda 安装--未整理

    版本查询 cpu tensorflow conda env list source activate tensorflow python import tensorflow as tf 和 tf.__ ...

  5. 深度学习框架Keras介绍及实战

    Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行.Keras 的开发重点是支持快速的实验.能够以最小的时延 ...

  6. 基于Windows,Python,Theano的深度学习框架Keras的配置

    1.安装Anaconda 面向科学计算的Python IDE--Anaconda 2.打开Anaconda Prompt 3.安装gcc环境 (1)conda update conda (2)cond ...

  7. 深度学习框架Keras安装

    环境:Windows 10 64位 版本!版本!版本!不要下载最新版本的! 一点要按照这个来!安装顺序也最好不要错! 首先安装DirectX SDK工具包 ,这是链接:https://www.micr ...

  8. 深度学习与CV教程(8) | 常见深度学习框架介绍

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  9. 转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比

    http://geek.csdn.net/news/detail/138968 Google近日发布了TensorFlow 1.0候选版,这第一个稳定版将是深度学习框架发展中的里程碑的一步.自Tens ...

随机推荐

  1. Spring源码阅读笔记04:默认xml标签解析

    上文我们主要学习了Spring是如何获取xml配置文件并且将其转换成Document,我们知道xml文件是由各种标签组成,Spring需要将其解析成对应的配置信息.之前提到过Spring中的标签包括默 ...

  2. Ubuntu几秒钟没有任何操作自动黑屏

    在鼠标或键盘30秒内没有做任何操作以后,显示器自动黑屏. 重新点击鼠标或键盘,屏幕唤醒. 设置中心各种设置方式都已经尝试过.无效. $xset -q // 执行该命令 Keyboard Control ...

  3. safari坑之 回弹

    博客地址: https://www.seyana.life/post/20 今天在使用safari浏览博客的时候, 发现在拉至顶部并产生回弹之后,头部导航隐藏了, 除非在上拉的时候,刚好达到顶部而不超 ...

  4. Asp.Net Core 2.0实现HttpResponse中繁切换

    随笔背景:因为项目中有个简单的功能是需要实现中文简体到繁体的切换,数据库中存储的源数据都是中文简体的,为了省事就想着通过HttpHeader的方式来控制Api返回对应的繁体数据. 实现方式:通过Asp ...

  5. Python——项目-小游戏

    开始我们的项目 飞机大战 1 项目的初体验 以及前期准备 游戏初体验画面 验证一下本地第三方包有没有导入 python3 -m pygame.examples.aliens 如果没有出现游戏画面请先安 ...

  6. 异步编程RxJava-介绍

    前言前段时间写了一篇对协程的一些理解,里面提到了不管是协程还是callback,本质上其实提供的是一种异步无阻塞的编程模式:并且介绍了java中对异步无阻赛这种编程模式的支持,主要提到了Future和 ...

  7. 深度学习与人类语言处理-语音识别(part3)

    上节回顾深度学习与人类语言处理-语音识别(part2),这节课我们接着看seq2seq模型怎么做语音识别 上节课我们知道LAS做语音识别需要看完一个完整的序列才能输出,把我们希望语音识别模型可以在听到 ...

  8. maven如何安装oracle驱动jdbc的jar包

    一.因为oracle驱动的压缩包在maven官网上并没有提供,所以需要自己去手动下载. 二.下载安装步骤如下: (1)第一步:找到你本地的oracle驱动包所在位置: (2)在cmd中打开jar包所在 ...

  9. Mybatis总结一之SQL标签方法

    ---恢复内容开始--- 定义:mapper.xml映射文件中定义了操作数据库的sql,并且提供了各种标签方法实现动态拼接sql.每个sql是一个statement,映射文件是mybatis的核心. ...

  10. kerberos系列之kerberos安装

    最近搞了一下kerberos,准备写一个系列,介绍kerberos的安装,和常用组件kerberos配置,今天进入第一篇:kerberOS安装 具体kerberos是什么东西,大家可以百度查一下,这里 ...