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

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

3天内不再提示

到底该选择TensorFlow还是Keras深度学习框架选型指南

zhKF_jqr_AI 来源:未知 作者:李倩 2018-03-26 11:11 次阅读

到底该选择TensorFlow还是Keras,是深度学习初学者经常纠结的一个问题。数据科学家Aakash Nain比较了TensorFlow和Keras,希望有助于选择合适的框架。

深度学习库/框架流行度(来源:Google)

深度学习无处不在,大量的深度学习库让初学者无所适从。这篇文章重点关注TensorlFlow和Keras两者之间的选择。TensorFlow是最著名的用于深度学习生产环境的框架。它有一个非常大非常棒的社区。然而,TensorFlow的使用不那么简单。另一方面,Keras是在TensorFlow基础上构建的高层API,比TF(TensorFlow的缩写)要易用很多。

既然Keras基于TensorFlow,那么两者有何区别?既然Keras对用户更友好,为什么我还需要使用TF来构建深度学习模型呢?下面一些内容将帮助你做出选择。

快速开发原型

如果你想快速创建、测试一个神经网络,写尽可能少的代码,那么选择Keras。花不了多少分钟,你就能用Keras创建简单或很复杂的神经网络。Model和SequentialAPI如此强大,基本上能做到你可能想要做的任何事情。让我们看一个例子吧:

model = Sequential()

model.add(Dense(32, activation='relu', input_dim=100))

model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop',

loss='binary_crossentropy',

metrics=['accuracy'])

# 生成虚假数据

import numpy as np

data = np.random.random((1000, 100))

labels = np.random.randint(2, size=(1000, 1))

# 训练模型,迭代数据(每个batch包含32个样本)

model.fit(data, labels, epochs=10, batch_size=32)

收工!!就是这么容易!

没有人不喜欢Pythonic!!

Keras的开发设计注重用户友好,因而某种意义上它更加pythonic。模块化是Keras的另一个优雅的设计指导原则。Keras中的任何东西都可以表示为模块,用户可以根据需要将其进一步组合。

弹性

有时候你不想用现成的东西,想要自己定义一些东西(比如,损失函数、测度、网络层,等等)。

尽管Keras 2的设计让你可以实现几乎所有你想要的东西,但是我们都知道底层的库提供了更多弹性。TF同样如此。相比Keras,TF允许你进行更多调整。

功能性

尽管Keras提供了创建深度学习模型一般所需的所有功能性,它还是不如TF提供得多。相比Keras,TensorFlow提供更多高级操作。当你从事研究或开发特殊种类的深度学习模型时,这一点是十分便利的。下面是一些例子:

线程和队列

队列是一个强大的机制,可以异步地计算图中的张量。类似地,你可以使用多个线程执行同一会话,通过并行运算加速操作。下面是一个在TensorFlow中使用队列和线程的简单例子:

# 创建图,等等。

init_op = tf.global_variables_initializer()

# 创建会话,以运行图中的操作。

sess = tf.Session()

# 初始化变量(比如epoch计数器)

sess.run(init_op)

# 开始输入入队线程。

coord = tf.train.Coordinator()

threads = tf.train.start_queue_runners(sess=sess, coord=coord)

try:

whilenot coord.should_stop():

# 运行训练步骤,等等

sess.run(train_op)

except tf.errors.OutOfRangeError:

print('训练完毕——达到epoch限制')

finally:

# 结束时,请求停止线程

coord.request_stop()

# 等待线程终止。

coord.join(threads)

sess.close()

调试器

TensorFlow有一个专门的调试器,为内部结构和正在运行的TensorFlow图的状态提供了可见性。从调试器获得的洞见可以加速调试训练和推断阶段的多种bug。

TensorFlow调试器截屏(来源:TensorFlow文档)

控制

就我的经验而言,你对神经网络的控制越多,你对神经网络在做什么的理解就更深。TF让你可以更多地控制神经网络。在TF中对权重和梯度进行操作有如神助。

例如,假设你的模型有三个变量,比如w、b、step,你可以选择变量step是否可以训练。你只需写一行代码就可以办到:

step = tf.Variable(1, trainable=False, dtype=tf.int32)

在训练阶段,梯度可以提供大量信息。你想控制梯度?当然可以,看下面的例子:

# 创建优化器

optimizer = GradientDescentOptimizer(learning_rate=0.1)

# 为一组变量计算梯度

grads_and_vars = opt.compute_gradients(loss, )

# grads_and_vars是一个元组的列表(梯度, 变量)。

# 你可以随意对梯度部分进行操作,比如,每项减1.

subtracted_grads_and_vars = [(gv[0] - 1.0, gv[1]) for gv in grads_and_vars]

# 请求优化器应用减一后的梯度。

optimizer.apply_gradients(subtracted_grads_and_vars)

(以上代码样例取自 CS 20SI: TensorFlow for Deep Learning Research)

结论(TL;DR)

除非你正从事研究性质的工作或开发某种特殊种类的神经网络,选择Keras(相信我,我是一个Keras党!!)使用Keras快速构建非常复杂的模型仍然超容易。

如果你想要更精细地控制你的网络,或者想要仔细查看你的网络发生了什么,那么TF是正确的选择(不过有时TF的语法会让你做噩梦的)。不过,现在TF已经集成了Keras,所以更明智的做法是使用tf.contrib.Keras创建你的网络,然后根据需要在你的网络中插入纯TensorFlow。简而言之,

tf.contrib.keras+tf=你所需要的一切

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

    关注

    42

    文章

    4575

    浏览量

    98773
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119922
  • tensorflow
    +关注

    关注

    13

    文章

    313

    浏览量

    60242

原文标题:TensorFlow还是Keras?深度学习框架选型指南

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

收藏 人收藏

    评论

    相关推荐

    Nanopi深度学习之路(1)深度学习框架分析

    最耳熟能详的就是TensorFlow,但再稍有了解的,会知道TensorFlow太过于底层,实现深度学习的过程复杂,但其框架是相当好的,
    发表于 06-04 22:32

    Nanopi深度学习之路(4)深度学习框架安装前的依赖项安装

    “Using TensorFlow backend”说明使用的是TensorFlow后端,使用keras必须安装TensorFlow,Theano,或者 CNTK之一,后端的意思是使用
    发表于 06-08 19:54

    【NanoPi K1 Plus试用体验】搭建深度学习框架

    近几年各种深度学习框架涌现,大家可能很难从众多的深度学习框架
    发表于 07-17 11:40

    深度学习框架TensorFlow&TensorFlow-GPU详解

    TensorFlow&TensorFlow-GPU:深度学习框架TensorFlow&
    发表于 12-25 17:21

    浅谈深度学习TensorFlow

    神经网络和深度学习的概念,但为了完整起见,我们将在这里介绍基础知识,并探讨 TensorFlow 的哪些特性使其成为深度学习的热门
    发表于 07-28 14:34

    迅为RK3399开发板人工智能深度学习框架

    `迅为率先在RK3399 开发板上支持了Docker、TensorFlow目标检测API、OpenCV、Keras、scikit-learn、pytorch和Python等,组成了人工智能深度
    发表于 05-21 17:28

    TensorFlow实战之深度学习框架的对比

    的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow、Caffe、Keras、CNTK、Torch7、MXNet、L
    发表于 11-16 11:52 4333次阅读
    <b class='flag-5'>TensorFlow</b>实战之<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>框架</b>的对比

    深度学习框架Keras代码解析

    总体来讲keras这个深度学习框架真的很“简易”,它体现在可参考的文档写的比较详细,不像caffe,装完以后都得靠技术博客,keras有它自
    发表于 12-15 08:22 4404次阅读

    深度学习框架排名:TensorFlow第一,PyTorch第二

    Karpathy表示,综合过去6年发表在ArXiv的4300篇机器学习论文(数据来源:cs.[CV|CL|LG|AI|NE]/stat.ML),根据其中各框架被提及的次数
    的头像 发表于 04-02 16:46 1.1w次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>框架</b>排名:<b class='flag-5'>TensorFlow</b>第一,PyTorch第二

    机器学习框架Tensorflow 2.0的这些新设计你了解多少

    几天前,Tensorflow刚度过自己的3岁生日,作为当前最受欢迎的机器学习框架Tensorflow在这个宝座上已经盘踞了近三年。无论是成熟的Ke
    的头像 发表于 11-17 11:33 3005次阅读

    深入了解TensorFlow随附的此版Keras将能为您实现哪些功能

    也是 TensorFlow 集成 Keras 的主要设计目标,即让用户能够选择对自己更有用处的 Keras 组件,而无需采用整个框架
    的头像 发表于 12-18 13:38 2612次阅读

    八种主流深度学习框架的介绍

    导读:近几年随着深度学习算法的发展,出现了许多深度学习框架。这些框架各有所长,各具特色。常用的开
    的头像 发表于 04-26 18:45 7445次阅读

    深度学习框架PyTorch和TensorFlow如何选择

    在 AI 技术兴起后,深度学习框架 PyTorch 和 TensorFlow 两大阵营似乎也爆发了类似的「战争」。这两个阵营背后都有大量的支持者,并且他们都有充足的理由来说明为什么他们
    发表于 02-02 10:28 867次阅读

    深度学习框架tensorflow介绍

    深度学习框架tensorflow介绍 深度学习框架
    的头像 发表于 08-17 16:11 1471次阅读

    深度学习算法的选择建议

    常重要的。本文将提供一些选择建议,以及如何决定使用哪种框架和算法。 首先,选择框架。目前,深度学习
    的头像 发表于 08-17 16:11 388次阅读