写点什么

Inside Tensorflow 之:tf.keras part1

  • 2019-11-29
  • 本文字数:1474 字

    阅读完需:约 5 分钟

Inside Tensorflow之:tf.keras part1

最近 keras 之父 Francois Chollet 分享了 TensorFlow 中 tf.keras 接口的一些高端的用法,下面就让我们了解一下:


首先,给演讲来个概况:



接下来是介绍 tf.keras 的架构:



下面首先介绍 Layer 类,这里可以看到其实在 Layer 中也可以实现 losses 和 metrics 的追踪功能。



那么 Layer 中没实现的功能包括:不涉及梯度的计算;设备指定;Tensor 变量的维度检查(必须输入和输出的 Tensor 第一维度是 batch N);类型检查



下面讲到了如何自定义自己的 Layer 类,有两种方式,下面是最简单的一种,这种方式在构建时是会根据传入的参数 input_dim 推断出 input 的 shape。



而下面这种方式,在构造时时推断不出 input 的 shape,必须等到调用该 Layer 层时才触发 build 函数去构建可训练的参数,调用 call 函数去做 inference。



当然,Layer 中也可以声明 non_trainable 的变量:



另外,Layer 也是可以嵌套使用的,就是在定义一个新的 Layer 类时去调用另外一个 Layer 类:



定义完 Layer 之后,那么怎么使用它进行 inference 和训练呢?其实流程都是大致固定的,定义 inference 结构,loss 函数,优化器。然后遍历 dataset,求梯度最后更新。



上面这些知识其实都是 Layer 的基本用法啦,让我们随着大佬的视频走的更远,飞的更高点,哈哈。


首先介绍的是在 Layer 中实现对 losses 追踪功能。




那么怎么将这个 loss 加到 loss 函数中呢?其实也就是本来 model 的 loss+model.losses(模型可追踪的 loss)



下面介绍了怎么让 Layer 类可序列化:在定义的时候加上 get_config 函数



另外在定义 Layer 的时候,call 函数有一个特别重要的参数 Training,用来指示 train 模式和非 train 模式下的区别,这对于 Batch_normalization 来说就很有用:



讲完了 Layer 类的定义,下面该轮到 Model 类的讲解了:



Model 类可以处理一些 top-level 的功能,这是 Layer 类不具备的,比如 training,saving,summary,模型可视化等



那么怎么在训练模型的时候打开 eager 模型呢(就是不会去构造 graph,速度相对会慢点):



下面介绍了 Functional Models 的概念,平时用的也最多。Functional Model 可以自动生成 call、build 和 get_config 方法




大佬总结了 Functional Model 的特点。其实最核心的点就是 Functional Model 只是去构造一个 layers 之间的 DAGs,仅仅处于 configuration 配置的层面,不会涉及到任何数据的流入和流出。个人一些使用 keras 的心得,一般比较复杂的模型,可以用 Functional Model 先去构造,然后使用 model.summary 或者 keras.utils.model_plot 函数将模型打印出来,然后去 check 下自己构造的模型有没有什么 bug。




下面介绍了在构造 Functional Model 时,内部的一些工作机制:可以看到有一个内部变量-keras_history 来追踪 Model 的构建。




那么这种 Functional Model 的构造方式有什么独特的特征呢?



首先介绍的是静态输入兼容性检查:可以看到在调用 build 的前后对输入 x 分别作了一次兼容性检查。



下面是 Whole-model 保存和 model plot 的功能:




另外,还有自动 Masking 的功能:



下面,大佬深度总结了在符号输入情况下(一般是使用 Input 来定义的输入)当你调用一个 Layer 时所有的内部流程:



最后将的是动态 Layer 类,该类因为存在动态的行为,不会被加入到 graph 中去执行。对应上个投影片的 step 6,如果是 dynamic 的 layer,则会根据静态的 shape inference 去调用 compute_output_shape 函数。



整个视频听下来感觉还是蛮有深度的,大佬就是大佬啊。


视频的链接是:


https://www.youtube.com/watch?


本文转载自 Alex-zhai 知乎账号。


原文链接:https://zhuanlan.zhihu.com/p/83513829


2019-11-29 08:00693

评论

发布
暂无评论
发现更多内容

基于「他者视角」重塑品牌,有米云找到一条更宽的大道

ToB行业头条

深入解读 MongoDB CDC 的设计与实现

Apache Flink

大数据 flink 实时计算

干货分享,现代列式数据库系统如何设计与实现? | StoneData 论文选读

StoneDB

MySQL 数据库 HTAP StoneDB

常用MySQL 查询语句大全

小魏写代码

MySQL :MySQL 数据库

GaoNeng:我是如何为OpenTiny贡献新组件的?

OpenTiny社区

开源 前端 UI组件库

Paimon+StarRocks 湖仓一体数据分析方案

Apache Flink

大数据 flink 实时计算

软件测试/测试开发丨Python 类的继承常见问题

测试人

Python 程序员 软件测试 自动化测试 测试开发

常见的负载均衡策略有哪些?

王磊

Java面试题

纯干货!一文get昇腾Ascend C编程入门全部知识点

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号9月PK榜

认识BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 8 月 PK 榜

ChatGPT API 调用教程:简单易懂的三步指南

Apifox

程序员 开发 API openai ChatGPT

使用全套开源工具构建 LLM 应用实战:在 Dify 调用 Baichuan 开源模型能力

Dify

LLMs LLMOps

技术分享 | LSM,Linux 内核的安全防护盾

鼎道智联

Linux

开讲啦!0基础也能玩转飞桨开源社区

飞桨PaddlePaddle

人工智能 百度飞桨 开源活动

穿上App外衣,保持Web灵魂——PWA温故

互联网工科生

App PWA #web

阿里云亮相数据库顶会VLDB 2023特邀主旨演讲:云数据库要像乐高积木一样好用

阿里云瑶池数据库

阿里云瑶池数据库 VLDB

【玩转鲲鹏DevKit系列】何如快速迁移有源码应用

华为云开发者联盟

开发 华为云 鲲鹏 华为云开发者联盟 企业号9月PK榜

字节跳动技术面试官,帮你考前划重点,还有面试真题哦

字节跳动技术范儿

字节跳动 面试 校招 字节跳动面经

开源可观测数据采集工具 Vector 已内置 GreptimeDB 支持

Greptime 格睿科技

数据库 vector Sink 可观测 Greptime

Inside Tensorflow之:tf.keras part1_文化 & 方法_Alex-zhai_InfoQ精选文章