TensorFlow正准备发布2.0版本 。 在本文中,我们希望预览TensorFlow的高级API标题的方向,并回答一些常见问题。

Keras是一个非常受欢迎的高级API,用于构建和培训深度学习模型。 它用于快速原型设计,最先进的研究和生产。 虽然TensorFlow今天支持Keras,但是我们将Keras更紧密地集成到TensorFlow平台的其余部分。

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

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

Keras有几个关键优势:

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

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

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

常问问题

我以为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特定的增强功能。 这些包括支持热切执行直观调试和快速迭代,支持TensorFlow SavedModel模型交换格式,以及对分布式培训的集成支持,包括TPU培训。

使用tf.keras 模型子类 API时,急切执行特别有用。 这个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笔记本中运行:

  !pip install tensorflow 
 导入张量流为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定义这样的模型,如下所示:

  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')) 
 然后可以在几行中编译和训练这样的模型: 
  model.compile(优化= '亚当', 损失= 'sparse_categorical_crossentropy', 度量= [ '准确性']) 
  model.fit(x_train,y_train,epochs = 5) 
  model.evaluate(x_test,y_test) 

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

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

功能API

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

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

  inputs = tf.keras.Input(shape =(32,)) 
  #一个层实例可以在张量上调用,并返回一个张量。 
  x = layers.Dense(64,activation ='relu')(输入) 
  x = layers.Dense(64,activation ='relu')(x) 
  predictions = layers.Dense(10,activation ='softmax')(x) 
  #实例化给定输入和输出的模型。 
  model = tf.keras.Model(inputs = inputs,outputs = predictions) 

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

Model Subclassing API

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

  class MyModel(tf.keras.Model): 
  def __init __(self): super(MyModel,self).__ init __() #在这里定义你的图层。 self.dense_1 = layers.Dense(32,activation ='relu') self.dense_2 = layers.Dense(num_classes,activation ='sigmoid') 
  def呼叫(自我,输入): #在这里定义你的前锋, #使用之前在`__init__`中定义的图层 x = self.dense_1(输入) return self.dense_2(x) 

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

例如:

  model = MyModel() 
 使用tf.GradientTape()作为磁带: logits = model(images,training = True) loss_value =损失(logits,labels) 
  grads = tape.gradient(loss_value,model.variables) optimizer.apply_gradients(zip(grads,model.variables)) 

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

使用Model Subclassing API实现 注意力的神经机器翻译

使用Model Subclassing API实现 GAN

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

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

  • 将kef.keras.layers与Keras模型定义分开使用,并编写自己的渐变和训练代码。 您可以单独和独立地使用tf.keras.optimizers,tf.keras.initializers,tf.keras.losses或tf.keras.metrics。
  • 完全忽略tf.keras并使用低级TensorFlow,Python和AutoGraph来获得所需的结果。

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

Estimators会发生什么?

估算器广泛用于Google以及更广泛的TensorFlow社区。 已经将几种模型打包为Premade Estimators ,包括线性分类器,DNN分类器,组合DNN线性分类器(又名宽和深模型)和梯度增强树。 这些模型已经投入生产并得到广泛部署,由于所有这些原因,Estimator API(包括Premade Estimators)将包含在TensorFlow 2.0中。

对于Premade Estimators的用户来说,新焦点对Keras和热切执行的影响将是微乎其微的。 我们可能会更改Premade Estimators的实现,同时保持API表面相同。 我们还将努力添加作为Premade Estimators实现的模型的Keras版本,我们将扩展Keras以更好地满足大规模生产要求。

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

继续到TensorFlow 2.0!

我们希望您能像我们一样喜欢使用tf.keras! 在接下来的几个月里,TensorFlow团队将专注于完善开发人员体验。 我们的文档和教程将反映这一路径。 我们期待您的想法和反馈(查看我们的社区资源 ),以及通过GitHub问题和PR的贡献。 感谢大家!

https://medium.com/tensorflow/standardizing-on-keras-guidance-on-high-level-apis-in-tensorflow-2-0-bad2b04c819a

标准化Keras:TensorFlow 2.0中的高级API指南相关推荐

  1. TensorFlow 2.0中的tf.keras和Keras有何区别?为什么以后一定要用tf.keras?

    选自pyimagesearch 作者:Adrian Rosebrock 参与:王子嘉.张倩 本文经机器之心授权转载,禁止二次转载 随着 TensorFlow 2.0 的发布,不少开发者产生了一些疑惑: ...

  2. 官方资源帖!手把手教你在TensorFlow 2.0中实现CycleGAN,推特上百赞

    铜灵 发自 凹非寺 量子位 出品| 公众号 QbitAI CycleGAN,一个可以将一张图像的特征迁移到另一张图像的酷算法,此前可以完成马变斑马.冬天变夏天.苹果变桔子等一颗赛艇的效果. 这行被顶会 ...

  3. Keras TensorFlow 混编中 trainable=False设置无效

    Keras TensorFlow 混编中 trainable=False设置无效 这是最近碰到一个问题,先描述下问题: 首先我有一个训练好的模型(例如vgg16),我要对这个模型进行一些改变,例如添加 ...

  4. 【干货】TensorFlow 2.0官方风格与设计模式指南(附示例代码)

    本文转自专知 [导读]TensorFlow 1.0并不友好的静态图开发体验使得众多开发者望而却步,而TensorFlow 2.0解决了这个问题.不仅仅是默认开启动态图模式,还引入了大量提升编程体验的新 ...

  5. 在ASP.NET Core 2.0中创建Web API

    目录 介绍 先决条件 软件 技能 使用代码 第01步 - 创建项目 第02步 - 安装Nuget包 步骤03 - 添加模型 步骤04 - 添加控制器 步骤05 - 设置依赖注入 步骤06 - 运行We ...

  6. 在装有Keras(Tensorflow)的环境中安装Pandas报错的问题与解决

    背景与问题 在神经网络编程中,需要将数据集处理成神经网络能够处理的格式.常见的以csv.xls等结构化表格文件表示的数据集,需要通过pandas进行读取才能在Python中使用. 在一个安装有Kera ...

  7. JDBC 2.0中的高级数据类型

    JDBC 2.0中提供了对SQL3标准中引入的新的数据类型,如Blob(binary large object).Clob(character large object).Array 对象.REF(对 ...

  8. [译]高效的TensorFlow 2.0:应用最佳实践以及有什么变化

    Tensorflow团队早早就放出了风声,Tensorflow 2.0就快来了,这是一个重要的里程碑版本,重点放在简单和易用性上.我对Tensorflow 2.0的到来充满期待,因此翻译了这篇Tens ...

  9. TensorFlow 2.0 beta版本来了!

    在不知不觉中,TensorFlow 2.0 beta版本已经发布,你可以通过下述方法安装: 或安装GPU版本: pip install tensorflow-gpu==2.0.0-beta0 在此测试 ...

最新文章

  1. html5--5-15 绘制阴影
  2. 广播,实现强制下线功能(项目文件已上传GitHub)
  3. 一季度跨越式增长,高灯科技跑出“第二曲线”
  4. linux 恢复数据
  5. 施密特正交化_格拉姆-施密特正交化--QR分解法的来源
  6. 单独使用ckfinder选择图片
  7. 【codevs1026】逃跑的拉尔夫
  8. You must install libks to build mod_signalwire
  9. ppt入门到精通全套视频教程,Word+Excel+PPT三合一教程(15G)
  10. Ubuntu电视卡安装指南
  11. 记录This request has been blocked; the content must be served over HTTPS.
  12. MySQL 中删除重复数据只保留一条
  13. 第二类曲面积分转化为二重积分
  14. oracle 闩锁(latch)概述
  15. 12.12下周黄金白银价格走势分析及期货原油操作建议布局
  16. 手机双摄像头原理及产业解析----转载
  17. vue组件封装: vue-popper+FloatManager
  18. 基于Hi3516DV300的嵌入式入门演练(上)
  19. 面试完还呗、拼多多、蚂蚁金服、趣头条、京东到家之后,我知道了这些
  20. 在手机上编程:自制的小飞可编程复数计算器(小飞计算器)

热门文章

  1. Apache PHP-fpm Mariadb
  2. 浅谈输入输出”重定向“——基于Linux系统
  3. windows 解决 Go下载包失败 设置代理
  4. Matlab 日常技巧 ,判断文件存在
  5. Android中添加背景音乐的两种方法
  6. spring_整体系统
  7. JVM04内存结构概述
  8. [云炬创业管理笔记]第二章成为创业者讨论3
  9. [云炬ThinkPython阅读笔记]3.4 增加新函数
  10. 安装wrf模式的第一天