Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[译]标准化Keras:TensorFlow 2.0中的高级API指南

[译]标准化Keras:TensorFlow 2.0中的高级API指南

作者头像
云水木石
发布于 2019-07-02 07:16:33
发布于 2019-07-02 07:16:33
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

Tensorflow 2.0带来的一个重大变化就是采用keras API作为TensorFlow的标准上层API,因为我在编码中使用到keras比较多,所以对这个变化感到高兴,现翻译一篇Tensorflow团队发布的文档:Standardizing on Keras: Guidance on High-level APIs in TensorFlow 2.0。原文地址:https://medium.com/tensorflow/standardizing-on-keras-guidance-on-high-level-apis-in-tensorflow-2-0-bad2b04c819a ,略有删减。点击阅读原文可以跳转到该文章,需要访问外国网站哦!

Keras是一个非常受欢迎的构建和训练深度学习模型的高级API。它用于快速原型设计、最前沿的研究以及产品中。虽然现在的TensorFlow已经支持Keras,在2.0中,我们将Keras更紧密地集成到TensorFlow平台。

将Keras作为TensorFlow的高级API,使得新的机器学习开发人员更容易开始使用TensorFlow。单一的高级API可以减少混乱,让我们能够专注于为研究人员提供高级功能。

我们希望您能像我们一样喜欢使用它!

Keras有几个关键优势:

  • 用户友好:Keras拥有为常见使用场景特别优化的简单、一致的接口。它为用户错误提供了清晰且可操作的反馈,以及易于理解的错误消息,并且通常提供有用的建议。
  • 模块化和可组合:Keras模型将可配置的构建块连接在一起,几乎没有限制。无需使用框架甚至不了解框架提供的所有内容的情况下,Keras的部件也可以重复使用。例如,您可以使用图层或优化器而无需使用Keras Model 进行训练。
  • 易于扩展:您可以编写自定义构建块来表达新的研究想法,包括新的图层、损失函数和[在此插入您的想法]以开发最先进的想法。
  • 针对初学者和专家:深度学习开发人员具有不同的背景和经验水平,而Keras提供了有用的API,无论您刚刚开始,还是拥有多年的经验。

综上,这些可以在更广泛的使用场景,从学习ML到研究、到应用程序开发、到部署,实现更轻松,更高效的工作流程。

首先,我们将回答几个问题。接下来,我们将仔细研究TensorFlow附带的Keras版本能够做到的事情。

FAQ

我以为Keras是一个单独的库?

首先,Keras是一个API规范。Keras的参考实现是作为独立的开源项目维护的,您可以在www.keras.io上找到它。该项目独立于TensorFlow,并拥有一个活跃的贡献者和用户社区。TensorFlow包含Keras API的完整实现(在tf.keras模块中),并有一些TensorFlow特有的增强功能。

Keras只是TensorFlow或其他库的包装器吗?

不,这是一个常见的(但可以理解的)误解。Keras是一个用于定义和训练机器学习模型的API标准。 Keras与特定实现无关:Keras API具有TensorFlow、MXNet、TypeScript、JavaScript、CNTK、Theano、PlaidML、Scala、CoreML和其他库的实现。

内置于TensorFlow的Keras版本与我在keras.io上可以找到的版本有什么区别?

TensorFlow包含Keras API(在tf.keras模块中)的实现,并有一些TensorFlow特定的增强功能,包括支持直观调试和快速迭代的eager execution,支持TensorFlow SavedModel模型交换格式,以及对分布式训练的集成支持,包括在TPU上训练。

使用tf.keras模型子类API时,eager execution特别有用。此API的灵感来自Chainer,使您能够强制性地编写模型的正向传递。tf.keras紧密集成在TensorFlow生态系统中,还包括对以下支持:

  • tf.data,使您能够构建高性能输入管道。如果您愿意,可以使用NumPy格式的数据训练模型,或出于扩展和性能考虑,使用tf.data进行训练。
  • 分发策略,用于在各种计算配置中分发训练,包括分布在许多计算机上的GPU和TPU。
  • 导出模型。使用tf.keras API创建的模型可以序列化为TensorFlow SavedModel格式,可用TensorFlow Serving部署或用其他语言绑定(Java,Go,Rust,C#等)提供服务。
  • 导出的模型可以部署在使用TensorFlow Lite的移动和嵌入式设备上,也可用于TensorFlow.js(注意:您也可以使用相同的Keras API直接在JavaScript中开发模型)。
  • 特性列,用于有效地表示和分类结构化数据
  • 还有更多。
我该如何安装tf.keras?我还需要通过pip安装Keras吗?

tf.keras包含在TensorFlow中。您无需单独安装Keras。例如,如果在Colab Notebook中运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!pip install tensorflow
import tensorflow as tf
Dense = tf.keras.layers.Dense

您就用上了tf.keras。如果您还不熟悉导入,可以查看一些最近的教程以获取示例。

您提到TensorFlow为初学者和专家提供不同样式的API。看起来怎么样?

TensorFlow开发人员具有有多种经验水平(从第一次学习ML的学生到ML专家和研究人员)。而TensorFlow的优势之一是它提供了多种API来支持不同的工作流程和目标。同样,这也是TensorFlow Keras集成的主要设计目标,用户可以选择Keras的一部分,而不必采用整个框架。

Sequential API

如果您是学习ML的学生,我们建议您开始时使用tf.keras Sequential API。它直观、简洁,适用于实践中95%的ML问题。使用此API,您可以用大约10行代码编写出第一个神经网络。

定义模型的最常用方法是构建图层图,最简单的模型类型是层的堆叠。您可以使用Sequential API定义这样的模型,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = tf.keras.Sequential()
model.add(layers.Dense(64, activation=’relu’))
model.add(layers.Dense(64, activation=’relu’))
model.add(layers.Dense(10, activation=’softmax’))
Such a model can then be compiled and trained in a few lines:
model.compile(optimizer=’adam’,
              loss=’sparse_categorical_crossentropy’,
              metrics=[‘accuracy’])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

您可以在“学习和使用ML”部分的tensorflow.org/tutorials上找到更多的使用Sequential API的示例。

单击此处获取教程,该教程将引导您使用Sequential API在Fashion MNIST数据集上训练您的第一个神经网络。

Functional API

当然,序列模型是一种简单的图层堆叠,不能表示任意模型。使用Functional API可以构建更高级的模型,使您可以定义复杂的拓扑,包括多输入和多输出模型,具有共享层的模型以及具有残差连接的模型。

在使用Functional API构建模型时,图层是可以调用(在张量上)的,并返回张量作为输出。然后可以使用这些输入张量和输出张量来定义模型。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inputs = tf.keras.Input(shape=(32,))
# A layer instance is callable on a tensor, and returns a tensor.
x = layers.Dense(64, activation=’relu’)(inputs)
x = layers.Dense(64, activation=’relu’)(x)
predictions = layers.Dense(10, activation=’softmax’)(x)
# Instantiate the model given inputs and outputs.
model = tf.keras.Model(inputs=inputs, outputs=predictions)

可以使用如上那样简单的命令来编译和训练这样的模型。您可以在此处了解有关Functional API的更多信息。

Model Subclassing API

使用Model Subclassing API可以构建完全可自定义的模型,您可以在类方法的主体中以此样式强制定义自己的前向传递。 例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyModel(tf.keras.Model):
 def __init__(self):
   super(MyModel, self).__init__()
   # Define your layers here.
   self.dense_1 = layers.Dense(32, activation=’relu’)
   self.dense_2 = layers.Dense(num_classes, activation=’sigmoid’)
 def call(self, inputs):
   # Define your forward pass here,
   # using layers you previously defined in `__init__`
   x = self.dense_1(inputs)
   return self.dense_2(x)

这些模型更灵活,但可能更难调试。可以使用前面显示的简单编译和拟合命令编译和训练所有三种类型的模型,或者您可以编写自己的自定义训练循环以进行完全控制。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = MyModel()
with tf.GradientTape() as tape:
  logits = model(images, training=True)
  loss_value = loss(logits, labels)
grads = tape.gradient(loss_value, model.variables)
optimizer.apply_gradients(zip(grads, model.variables))

有关Model Subclassing样式的更多示例,请访问tensorflow.org/tutorials(请参阅“研究和实验”部分)。

使用Model Subclassing API实现的Neural Machine Translation with Attention

使用Model Subclassing API实现的GAN

如果我的研究不适合这些风格怎么办?

如果您发现tf.keras限制了你的应用领域,您有很多选择。您可以:

  • 将tf.keras.layers与Keras模型定义分开使用,编写自己的梯度和训练代码。您可以单独和独立地使用tf.keras.optimizers,tf.keras.initializers,tf.keras.losses或tf.keras.metrics。
  • 完全忽略tf.keras,使用低级TensorFlow API,Python和AutoGraph来达到你的目标。

这完全取决于您!请注意,tf.layers中的非面向对象的层将被废弃,并且tf.contrib.*(包括tf.contrib.slim和tf.contrib.learn等高级API)将在TF 2.0中不可用。

Estimators会发生什么变化?

Estimators广泛用于Google以及范围更广的TensorFlow社区。几种模型已被打包为Premade Estimators,包括线性分类器、DNN分类器、组合DNN线性分类器(又名Wide and Deep Models)和Gradient Boosted Trees。这些模型已经用于产品并得到广泛部署,由于所有这些原因,Estimator API(包括Premade Estimators)将包含在TensorFlow 2.0中。

对于Premade Estimators的用户来说,广受关注的Keras和eager execution对其影响将是微乎其微的。我们可能会更改Premade Estimators的实现,但会保持API接口相同。我们还将努力添加Premade Estimators实现的Keras版本,而且我们将扩展Keras以更好地满足大规模产品要求。

也就是说,如果您正在开发自定义架构,我们建议使用tf.keras来构建模型而不是Estimator。如果您正在使用需要Estimators的基础架构,您可以使用model_to_estimator()来转换模型,同时确保Keras工作在TensorFlow生态系统中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
人工智能|备战Tensorflow技能认证之两种快速构建模型的常用方式
Tensorflow认证考试内容五项中的第一项是基础/简单模型,第二项是学习数据集模型。小编猜想,这两者都是比较基础的知识,涉及到的知识应该主要包含:全连接神经网络搭建简单模型,数据集的加载,以及根据数据集搭建全连接神经网络模型进行训练(也有可能会涉及到卷积)。
算法与编程之美
2020/04/07
5140
人工智能|备战Tensorflow技能认证之两种快速构建模型的常用方式
[Deep-Learning-with-Python] Keras高级概念
目前为止,介绍的神经网络模型都是通过Sequential模型来实现的。Sequential模型假设神经网络模型只有一个输入一个输出,而且模型的网络层是线性堆叠在一起的。
用户1631856
2018/08/09
1.7K0
[Deep-Learning-with-Python] Keras高级概念
TF-char8-Keras高层接口
文件中保存的仅仅是参数张量的数值,没有其他的结构参数,需要使用相同的网络结构才能恢复网络数据,一般在拥有源文件的情况下使用。
皮大大
2021/03/02
4950
Keras函数式API
之前所有的神经网络都是基于Sequential模型实现的,而且网络都是层的线性叠加。但是在实际情况下,有些网络需要多个独立的输入,有些网络需要多个输出;而且有些层之间具有内部分支。
皮大大
2023/08/25
2020
【TensorFlow2.0】以后我们再也离不开Keras了?
在TensorFlow2.0中,Keras是一个用于构建和训练深度学习模型的高阶 API。因此如果你正在使用TensorFow2.0,那么使用Keras构建深度学习模型是您的不二选择。在Keras API中总共有如下三大块:
用户1508658
2019/07/28
1.2K0
TensorFlow2.0+的API结构梳理
本文梳理了tf 2.0以上版本的API结构,用于帮助国内的初学者更好更快的了解这个框架,并为检索官方的API文档提供一些关键词。
孔西皮
2021/03/18
8910
TensorFlow2.0(11):tf.keras建模三部曲
Keras是一个基于Python编写的高层神经网络API,凭借用户友好性、模块化以及易扩展等有点大受好评,考虑到Keras的优良特性以及它的受欢迎程度,TensorFlow2.0中将Keras的代码吸收了进来,化身为tf.keras模块供用户使用。
统计学家
2019/12/27
8490
一文上手Tensorflow2.0(四)
【磐创AI导读】:本系列文章介绍了与tensorflow的相关知识,包括其介绍、安装及使用等。本篇文章是本系列文章的最后一篇。查看上篇:一文上手Tensorflow2.0之tf.keras|三。在文末作者给出了答疑群的二维码,有疑问的读者可以进群提问。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2019/08/23
1.6K0
TensorFlow 2.0发布在即,高级API变化抢先看
作者 | Sandeep Gupta, Josh Gordon, and Karmel Allison
AI科技大本营
2018/12/26
1K0
tensorflow学习(keras)
keras是一个可用于快速构建和训练深度学习模型的API。里面的模型的一般的使用流程如下:
opprash
2019/09/20
6090
干货 | TensorFlow 2.0 模型:Keras 训练流程及自定义组件
在上一篇文章中,我们介绍了循环神经网络的建立方式。本来接下来应该介绍 TensorFlow 中的深度强化学习的,奈何笔者有点咕,到现在还没写完,所以就让我们先来了解一下 Keras 内置的模型训练 API 和自定义组件的方法吧!本文介绍以下内容:
AI研习社
2019/10/22
3.3K0
利用Tensorflow2.0实现手写数字识别
前面两节课我们已经简单了解了神经网络的前向传播和反向传播工作原理,并且尝试用numpy实现了第一个神经网络模型。手动实现(深度)神经网络模型听起来很牛逼,实际上却是一个费时费力的过程,特别是在神经网络层数很多的情况下,多达几十甚至上百层网络的时候我们就很难手动去实现了。这时候可能我们就需要更强大的深度学习框架来帮助我们快速实现深度神经网络模型,例如Tensorflow/Pytorch/Caffe等都是非常好的选择,而近期大热的keras是Tensorflow2.0版本中非常重要的高阶API,所以本节课老shi打算先给大家简单介绍下Tensorflow的基础知识,最后借助keras来实现一个非常经典的深度学习入门案例——手写数字识别。废话不多说,马上进入正题。
用户7569543
2020/07/19
1.1K0
利用Tensorflow2.0实现手写数字识别
【深度学习】Tensorflow2.x入门(一)建立模型的三种模式
最近做实验比较焦虑,因此准备结合推荐算法梳理下Tensorflow2.x的知识。介绍Tensorflow2.x的文章有很多,但本文(系列)是按照作者构建模型的思路来展开的,因此不会从Eager Execution开始。另外,尽量摆脱小白文,加入自己的理解。 本文约2.7k字,预计阅读10分钟。
黄博的机器学习圈子
2020/12/11
1.8K0
英文教程太难啃?这里有一份TensorFlow2.0中文教程(持续更新中)
虽然,自 TensorFlow 2.0 发布以来,我们总是能够听到「TensorFlow 2.0 就是 keras」、「说的很好,但我用 PyTorch」类似的吐槽。但毋庸置疑,TensorFlow 依然是当前最主流的深度学习框架(感兴趣的读者可查看机器之心文章:2019 年,TensorFlow 被拉下马了吗?)。
机器之心
2019/05/14
1.1K0
英文教程太难啃?这里有一份TensorFlow2.0中文教程(持续更新中)
Python安装TensorFlow 2、tf.keras和深度学习模型的定义
使用tf.keras,您可以设计,拟合,评估和使用深度学习模型,从而仅用几行代码即可做出预测。它使普通的深度学习任务(如分类和回归预测建模)可供希望完成任务的普通开发人员使用。
拓端
2020/11/03
1.7K0
TensorFlow 2.0 的新增功能:第一、二部分
本书的这一部分将为您简要概述 TensorFlow 2.0 中的新增功能,与 TensorFlow 1.x 的比较,惰性求值和急切执行之间的差异,架构级别的更改以及关于tf.keras和Estimator的 API 使用情况。
ApacheCN_飞龙
2023/04/26
3.7K0
tensorflow中keras.models()的使用总结
初学者在调用keras时,不需要纠结于选择tf.keras还是直接import keras,现如今两者没有区别。从具体实现上来讲,Keras是TensorFlow的一个依赖(dependency)。但,从设计上希望用户只透过TensorFlow来使用,即tf.keras。
用户1483438
2022/01/02
6.6K0
Keras的基本使用(1)--创建,编译,训练模型
Keras 是一个用 Python 编写的,高级的神经网络 API,使用 TensorFlow,Theano 等作为后端。快速,好用,易验证是它的优点。 官方文档传送门:http://keras.io/ 中文文档传送门:http://keras.io/zh 中文第三方文档:http://keras-cn.readthedocs.io
caoqi95
2019/03/27
1.3K0
TensorFlow2.0(12):模型保存与序列化
模型训练好之后,我们就要想办法将其持久化保存下来,不然关机或者程序退出后模型就不复存在了。本文介绍两种持久化保存模型的方法:
统计学家
2019/12/30
1.8K0
TensorFlow 2.0 - Keras Pipeline、自定义Layer、Loss、Metric
文章目录 1. Keras Sequential / Functional API 2. 自定义 layer 3. 自定义 loss 4. 自定义 评估方法 学习于:简单粗暴 TensorFlow 2 1. Keras Sequential / Functional API tf.keras.models.Sequential([layers...]),但是它不能表示更复杂的模型 mymodel = tf.keras.models.Sequential([ tf.keras.layers.Flat
Michael阿明
2021/02/19
1K0
相关推荐
人工智能|备战Tensorflow技能认证之两种快速构建模型的常用方式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验