名表交流网 首页 名表图片鉴赏 积家 查看内容

一文看懂Keras和TensorFlow到底哪家强

2023-1-30 10:05| 发布者: fuwanbiao| 查看: 248| 评论: 0

摘要: 新智元引荐来源:AI前线(ID:ai-front)编辑:Debra【新智元导读】本文的作者经常在电子邮箱中、社交媒体上,以至在与深度学习研讨人员、从业者和工程师面对面交谈时,会被问到这些问题:我应该在项目中运用Keras还 ...

新智元引荐


来源:AI前线(ID:ai-front)


编辑:Debra


【新智元导读】本文的作者经常在电子邮箱中、社交媒体上,以至在与深度学习研讨人员、从业者和工程师面对面交谈时,会被问到这些问题:我应该在项目中运用Keras还是TensorFlow?TensorFlow和Keras哪个更好?我应该花时间研讨TensorFlow还是Keras?你是不是也有相同的疑问?假如有,置信这篇文章会给你答案。


实践上,到2017年中,Keras曾经被大范围采用,并与TensorFlow集成在一同。这种TensorFlow+Keras的组合让你能够:


运用Keras的接口定义模型;假如你需求特定的TensorFlow功用或者需求完成Keras不支持但TensorFlow支持的自定义功用,能够回到TensorFlow。


简单地说,你能够将TensorFlow代码直接插入到Keras的模型或锻炼管道中!


但请别误解,我并不是说你就不需求了解TensorFlow了。我的意义是,假如你:


刚开端接触深度学习……在为下一个项目选型……想知道Keras或TensorFlow哪个“更好”……


我的倡议是先从Keras着手,然后深化TensorFlow,这样能够取得你需求的某些特定功用。


在这篇文章中,我将向你展示如何运用Keras锻炼神经网络,以及如何运用直接构建在TensorFlow库中的Keras+TensorFlow组合来锻炼模型。


Keras与TF我该学哪个?


在文章的其他部分,我将继续讨论有关Keras与TensorFlow的争论以及为什么说这个问题其实是个错误的问题。


我们将运用规范的keras模块以及TensorFlow的tf.keras模块完成一个卷积神经网络(CNN)。


我们将在一个样本数据集上锻炼CNN,然后检查结果——你会发现,Keras和TensorFlow能够很融洽地协作。


最重要的是,你将会了解为什么Keras与TensorFlow之间的争论其实是没有意义的。


固然从TensorFlow宣布将Keras集成到官方TensorFlow版本中曾经一年多时间了,但很多深度学习从业者依旧不知道他们能够经过tf.keras子模块访问Keras,为此我感到很诧异。


更重要的是,Keras+TensorFlow的集成是无缝的,你能够直接将TensorFlow代码放到Keras模型中。


在TensorFlow中运用Keras将为你带来一箭双雕的益处:


你能够运用Keras提供的简单直观的API来创建模型;KerasAPI与scikit-learn(被以为是机器学习API的“黄金规范”)很像;KerasAPI采用了模块化,易于运用;当你需求自定义完成或者更复杂的损失函数时,能够直接进入TensorFlow,并让代码自动与Keras模型集成。


在过去几年中,深度学习研讨人员、从业人员和工程师通常需求做出以下选择:


我是选择易用但难以定制的Keras库?还是选择难用的TensorFlowAPI,并编写更多的代码?


所幸的是,我们不用再纠结了。


假如你发现自己还在问这样的问题,那么请退后一步——你问的是错误的问题——你能够同时具有这两个框架。

一文看懂Keras和TensorFlow到底哪家强


如图所示,导入TensorFlow(tf),然后调用tf.keras,可见Keras实践上曾经成为TensorFlow的一部分。


在tf.keras中包含Keras让你能够运用规范的Keras包完成简单的前馈神经网络:

一文看懂Keras和TensorFlow到底哪家强


然后运用tf.keras子模块完成相同的网络:

一文看懂Keras和TensorFlow到底哪家强


这能否意味着你必须运用tf.keras?规范的Keras包是不是曾经过时?当然不是。


作为一个库,Keras依旧能够单独运用,因而未来两者可能会各奔前程。不外,由于谷歌官方支持Keras和TensorFlow,所以似乎不太可能呈现这种状况。


关键是:


假如你习气运用Keras编写代码,那么请继续这样做。


但假如你主要运用的是TensorFlow,那么应该开端思索一下KerasAPI:


它内置于TensorFlow中;它更容易运用;当你需求运用TensorFlow来完成特定功用时,能够直接将其集成到Keras模型中。


我们的样本数据集

一文看懂Keras和TensorFlow到底哪家强


CIFAR-10数据集包含了10个分类,我们将它用在我们的演示中。


为简单起见,我们将运用以下措施在CIFAR-10数据集上锻炼两个单独的卷积神经网络:


TensorFlow+Keras;tf.keras的Keras子模块。


我还将展示如何将自定义的TensorFlow代码包含在Keras模型中。


我们的项目结构


能够运用tree命令在终端中查看我们的项目结构:

一文看懂Keras和TensorFlow到底哪家强


pyimagesearch模块不能经过pip装置,请点击文末提供的下载链接。往常让我们看一下该模块的两个重要Python文件:


minivggnetkeras.py:MiniVGGNet(一个机遇VGGNet的深度学习模型)的Keras完成。minivggnettf.py:MiniVGGNet的TensorFlow+Keras(即tf.keras)完成。


项目根目录包含两个Python文件:


train_network_keras.py:Keras版本的锻炼脚本。train_network_tf.py:TensorFlow+Keras版本的锻炼脚本,简直与前一个一模一样。


每个脚本都将生成相应的锻炼精确率和损失:


plot_keras.png


plot_tf.png


运用Keras锻炼网络

一文看懂Keras和TensorFlow到底哪家强


锻炼的第一步是运用Keras完成网络架构。


翻开minivggnetkeras.py文件,并插入以下代码:

一文看懂Keras和TensorFlow到底哪家强


我们先导入构建模型需求的一系列Keras包。


然后定义我们的MiniVGGNetKeras类:

一文看懂Keras和TensorFlow到底哪家强


我们定义了build措施、inputShape和input。


然后定义卷积神经网络的主要部分:

一文看懂Keras和TensorFlow到底哪家强


你会发现我们在应用池化层之前堆叠了一系列卷积、ReLU激活和批量规范化层,以便减少卷的空间维度。还运用了Dropout来减少过拟合。


往常将全衔接层添加到网络中:

一文看懂Keras和TensorFlow到底哪家强


我们曾经运用Keras完成了CNN,往常创建将用于锻炼的驱动脚本。


翻开train_network_keras.py并插入以下代码:

一文看懂Keras和TensorFlow到底哪家强


我们先导入需求的包。


matplotlib设置为“Agg”,这样就能够将锻炼结果保存为图像文件。然后导入MiniVGGNetKeras类。我们运用scikit-learn的LabelBinarizer中止“独热”编码,并运用classification_report打印分类精度。然后导入数据集。


我们经过--plot传入命令行参数,也就是图像的保存途径。


往常让我们加载CIFAR-10数据集,并对标签中止编码:

一文看懂Keras和TensorFlow到底哪家强


我们先加载和提取锻炼和测试分割,并将它们转换为浮点数和中止数据缩放。


然后我们对标签中止编码,并初始化labelNames。


接下来,让我们开端锻炼模型:

一文看懂Keras和TensorFlow到底哪家强


我们先设置锻炼参数和优化措施。


然后我们运用MiniVGGNetKeras.build措施初始化和编译模型。


随后,我们启动了锻炼程序。


往常让我们来评价网络并生成结果图:

一文看懂Keras和TensorFlow到底哪家强


我们基于数据的测试分割来评价网络,并生成classification_report,最后再导出结果。


留意:通常我会序列化并导出模型,以便能够将其用在图像或视频的处置脚本中,但这里不打算这样做,由于这超出了本文的范围。


翻开一个终端并执行以下命令:

一文看懂Keras和TensorFlow到底哪家强

一文看懂Keras和TensorFlow到底哪家强


我的CPU完成一个epoch需求5分多钟。

一文看懂Keras和TensorFlow到底哪家强


我们取得了75%的精确率——当然不是最先进的,不外它比随机猜测(1/10)要好得多。


关于小型网络来说,我们的精确率算是十分好的了,而且没有发作过拟合。


运用TensorFlow和tf.keras锻炼网络


运用tf.keras构建的MiniVGGNetCNN与我们直接运用Keras构建的模型是一样的,除了为演示目的而修正的激活函数。


往常我们曾经运用Keras库完成并锻炼了一个简单的CNN,接下来我们要:


运用TensorFlow的tf.keras完成相同的网络;在Keras模型中包含一个TensorFlow激活函数,这个函数不是运用Keras完成的。


首先,翻开minivggnettf.py文件,我们将完成TensorFlow版本的MiniVGGNet:

一文看懂Keras和TensorFlow到底哪家强

一文看懂Keras和TensorFlow到底哪家强

一文看懂Keras和TensorFlow到底哪家强


请留意,导入部分只需一行。tf.keras子模块包含了我们能够直接调用的一切Keras函数。


我想强调一下Lambda层——它们用来插入自定义激活函数CRELU(ConcatenatedReLU)。


Keras并没有完成CRELU,但TensorFlow完成了——经过运用TensorFlow和tf.keras,我们能够运用一行代码将CRELU添加到Keras模型中。


下一步是编写TensorFlow+Keras驱动脚原本锻炼MiniVGGNetTF。


翻开train_network_tf.py并插入以下代码:

一文看懂Keras和TensorFlow到底哪家强

一文看懂Keras和TensorFlow到底哪家强


然后是解析命令行参数。


接着像之前一样加载数据集。


其他的行都一样——提取锻炼/测试分割和编码标签。


往常让我们开端锻炼模型:

一文看懂Keras和TensorFlow到底哪家强

一文看懂Keras和TensorFlow到底哪家强


锻炼过程简直是一样的。我们曾经完成了完整相同的锻炼流程,只是这次运用的是tf.keras。


翻开一个终端并执行以下命令:

一文看懂Keras和TensorFlow到底哪家强

一文看懂Keras和TensorFlow到底哪家强


锻炼完成后,你将取得相似于下面这样的结果:

一文看懂Keras和TensorFlow到底哪家强


经过运用CRELU交流RELU激活函数,我们取得了76%的精确率。不外,这1%的提升可能是由于网络权重的随机初始化,需求经过进一步的交叉考证明验来证明这种精确率的提升的确是由于CRELU。


不论怎样,原始精确率并不是本节的重点。我们需求关注的是如何在Keras模型内部运用TensorFlow激活函数交流规范的Keras激活函数!


你也能够运用自己的自定义激活函数、损失/成本函数或层。


总结


在这篇文章中,我们讨论了Keras和TensorFlow相关的问题,包含:


我应该在项目中运用Keras还是TensorFlow?TensorFlow和Keras哪个更好?我应该花时间研讨TensorFlow还是Keras?


最后我们发现,在Keras和TensorFlow之间做出选择变得不那么重要。


由于Keras库曾经经过tf.keras模块直接集成到TensorFlow中了。


相关代码下载:


英文原文:


(本文经受权转载自“AI前线”,ID:ai-front)


新智元AI技术+产业社群招募中,欢送对AI技术+产业落地感兴味的同窗,加小助手_3入群;经过审核后我们将约请进群,参与社群后务必修正群备注(姓名-公司-职位;专业群审核较严,敬请体谅)。



路过

雷人

握手

鲜花

鸡蛋
已有 0 人参与

会员评论

 名表回收网手机版

官网微博:名表回收网服务平台

今日头条二维码 1 微信公众号二维码 1 抖音小程序二维码 1
浙江速典奢贸易有限公司 网站经营许可证 备案号:浙ICP备19051835号2012-2022
名表回收网主要专注于手表回收,二手名表回收/销售业务,可免费鉴定(手表真假),评估手表回收价格,正规手表回收公司,浙江实体店,支持全国范围上门回收手表
返回顶部