写点什么

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:00627

评论

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

全网最透彻!Dubbo整合SpringBoot详解,又通宵了

Java 程序员 后端

关于Redis主从节点数据过期一致性的思考,它真的足够一致了吗?

Java 程序员 后端

写了四年的Java代码,分布式高并发都不会还做程序员?

Java 程序员 后端

先知道怎么手写一个分页查询,再去使用PageHelper吧

Java 程序员 后端

入门级的我在学完阿里大牛写的MySQL笔记后,简历上写了精通

Java 程序员 后端

凭借着这份Spring面试题,我拿到了阿里,字节跳动美团的offer

Java 程序员 后端

分布式基石|最难 paxos 和最易 raft?,java排序算法面试题

Java 程序员 后端

初学者这样玩 TypeScript,迟早进大厂系列!

Java 程序员 后端

初探Linux--鸟哥私房菜读书笔记,廖雪峰java教程百度云

Java 程序员 后端

我的应用我做主丨动手搭建招聘小应用

华为云开发者联盟

低代码 招聘 应用 AppCube 应用魔方

公司来了一位前阿里大神,分享8面阿里面经(Java岗面试题集锦

Java 程序员 后端

关于垃圾回收你真的了解透彻了吗?我熬夜深度剖析了一下

Java 程序员 后端

农业末流211,Java自学一年的我是怎么走上大厂之路的

Java 程序员 后端

一个往返于海陆的撸猫打渔人,用影像记录生活的星辰大海

最新动态

初识java-JDBC,mysql索引左前缀原理

Java 程序员 后端

使用MySQL的NoSQL的七大理由,java基础入门第二版第三章答案

Java 程序员 后端

全网最新最全面Java程序员面试清单(12专题5000解析)

Java 程序员 后端

写博客是一种乐趣,一种需要培养的乐趣,java技术架构SHEET

Java 程序员 后端

刚从今日头条Java研发岗面试回来,我总结的失败原因(附面试题

Java 程序员 后端

开源应用中心|Discuz!X全新PC社区体验,多种场景一站解决

Discuz! 开源社区 Discuz

做了两年P7面试官,谈谈我认为的阿里人才画像,你配吗

Java 程序员 后端

凡尔赛一波:美团面试就这?,java工程师面试突击第二季分布式

Java 程序员 后端

做个小项目那不是简简单单!Java实现航空航班管理系统。

Java 程序员 后端

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

Java 程序员 后端

八、springboot 简单优雅的通过docker-compose 构建

Java 程序员 后端

分布式下的数据一致性问题,怎么解决?,java编程教程下载

Java 程序员 后端

判断对象是否已死分析总结——JVM系列,让人茅塞顿开

Java 程序员 后端

看动画学算法之:双向队列dequeue

程序那些事

数据结构 算法 程序那些事 11月日更 双向队列

全网讲解最透彻:高性能网络应用框架Netty,仅此一篇

Java 程序员 后端

分布式ID生成策略,我和面试官掰扯了一个小时

Java 程序员 后端

分布式事务与Seate框架:分布式事务理论,Java知识总结

Java 程序员 后端

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