“Keras之父发声:TF 2.0 + Keras 深度学习必知的12件事”

2019 年 3 月 19 日 图灵教育

来源:Twitter

作者:François Chollet  编辑:肖琴

本文转载自:新智元

【导读】Keras 作者 François Chollet 近日发表了一系列推文,如果你使用 TensorFlow 2.0 + Keras 做深度学习研究,这里有你需要知道的一切。

TensorFlow 2.0 前几天新鲜出炉,Alpha 版可以抢先体验。新版本主打简单易用可扩展,大大简化了 API。


Keras 作者 François Chollet 今天发表了一系列推文,用12个示例解释了使用TensorFlow 2.0 + Keras 的一些重要技巧。


如果你使用 TF 2.0 + Keras 做深度学习研究,这里有你需要知道的一切。


Keras 作者 François Chollet


1)你需要知道的第一个类是 “Layer”。一个 Layer 封装了一个状态 (权重) 和一些计算 (在 “call” 方法中定义)。



2)“add_weight” 方法提供了创建权重的快捷方式。


3)最好在一个单独的 “build” 方法中创建权重,使用你的 layer 看到的第一个输入的形状来调用该方法。这种模式让我们不用必须指定’ input_dim ‘:



4)你可以通过在 GradientTape 中调用 layer 来自动检索该层权重的梯度。使用这些梯度,你可以手动或使用优化器对象来更新 layer 的权重。当然,你也可以在使用梯度之前修改它们。



5)由 layers 创建的权重可以是可训练的,也可以是不可训练的。是否可训练可以在 layer 的属性 “trainable_weights” 和 “non_trainable_weights” 中看到。比如,这是一个具有不可训练权重的层:



6)层可以递归地嵌套,以创建更大的计算块。每一层将跟踪其子层的权重 (包括可训练的和不可训练的)。



7)层会在前向传递时创建损失。这对于正则化损失特别有用。子层创建的损失由父层递归跟踪。



8)这些损失在每次向前传递开始时由顶层清除 —— 它们不会累积。“layer.losses” 总是只包含在 “最后一次” 前向传递时产生的损失。在编写训练循环时,你通常需要将这些损失累加起来使用。



9)TF 2.0 默认情况下是 eager。但是通过将计算编译成静态图,将能够获得更好的性能。静态图是研究人员最好的朋友!你可以通过将其包装在一个 tf.function 中来编译任何函数:



10)有些层,特别是 “BatchNormalization” 层和 “退 Dropout” 层,在训练和推理过程中会表现出不同的行为。对于这样的层,标准做法是在 “call” 方法中加入一个 “training”(boolean) 参数。



11)有很多内置层是可用的,从 Dense 层到 Conv2D 层到 LSTM 层,再到 Conv2DTranspose 或 ConvLSTM2D。你要学会好好重用这些内置函数。


12)要构建深度学习模型,你不必总是使用面向对象编程。到目前为止,我们看到的所有层都可以按函数组合,就像这样 (我们称之为 “Functional API”):



函数式 API 往往比 subclassing 更简洁,并且还有其他优点。


了解关于 Functional API 的更多信息:

https://www.tensorflow.org/alpha/guide/keras/functional


但是,请注意,函数式 API 只能用于定义层的 DAGs—— 递归网络应该定义为 “Layer” 子类。


在研究工作中,你可能经常发现自己混合匹配了 OO 模型和函数式模型。


以上,就是使用 TensorFlow 2.0 + Keras 来重新实现大多数深度学习研究论文所需要的全部内容!


现在让我们来看一个非常简单的例子:hypernetworks


hypernetwork 是一个深度神经网络,它的权重由另一个网络 (通常较小) 生成。


让我们实现一个非常简单的 hypernetwork:我们将使用前面定义的 “Linear” 层,并使用它生成另一个 “Linear” 层。



另一个快速示例:以任何一种风格实现 VAE,可以是 subclassing,或者函数式 API。找到最适合你的方法吧!


subclassing


Functional API


最后,你可以在这个 Colab 笔记本中使用这些代码示例:

https://colab.research.google.com/drive/17u-pRZJnKN0gO5XZmq8n5A2bKGrfKEUg


推荐图书:


原版豆瓣评分9.3,Keras之父、Google人工智能研究员François Chollet著作

《Python深度学习》

作者:弗朗索瓦•肖莱
译者:张亮(hysic)


本书详尽介绍了用Python和Keras进行深度学习的探索实践,包括计算机视觉、自然语言处理、产生式模型等应用,示例步骤讲解详细透彻。本书立足于人工智能的可达性和大众化,读者无须具备机器学习相关背景知识即可展开阅读。在学习完本书后,读者将具备搭建自己的深度学习环境、建立图像识别模型、生成图像和文字等能力。


☟☟☟阅读原文】查看深度学习书单

登录查看更多
12

相关内容

【CVPR2020】MSG-GAN:用于稳定图像合成的多尺度梯度GAN
专知会员服务
26+阅读 · 2020年4月6日
KGCN:使用TensorFlow进行知识图谱的机器学习
专知会员服务
80+阅读 · 2020年1月13日
【模型泛化教程】标签平滑与Keras, TensorFlow,和深度学习
专知会员服务
20+阅读 · 2019年12月31日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
Keras François Chollet 《Deep Learning with Python 》, 386页pdf
专知会员服务
144+阅读 · 2019年10月12日
tf.GradientTape 详解
TensorFlow
117+阅读 · 2020年2月21日
盘一盘 Python 系列 10 - Keras (上)
平均机器
5+阅读 · 2019年8月26日
TensorFlow 2.0深度强化学习指南
云栖社区
18+阅读 · 2019年2月1日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
一个小例子带你轻松Keras图像分类入门
云栖社区
4+阅读 · 2018年1月24日
Generalization and Regularization in DQN
Arxiv
6+阅读 · 2019年1月30日
Multi-task Deep Reinforcement Learning with PopArt
Arxiv
4+阅读 · 2018年9月12日
A Multi-Objective Deep Reinforcement Learning Framework
Arxiv
4+阅读 · 2018年4月9日
VIP会员
相关资讯
tf.GradientTape 详解
TensorFlow
117+阅读 · 2020年2月21日
盘一盘 Python 系列 10 - Keras (上)
平均机器
5+阅读 · 2019年8月26日
TensorFlow 2.0深度强化学习指南
云栖社区
18+阅读 · 2019年2月1日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
一个小例子带你轻松Keras图像分类入门
云栖社区
4+阅读 · 2018年1月24日
Top
微信扫码咨询专知VIP会员