大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

评论

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

基于Java和Bytemd用120行代码实现一个桌面版Markdown编辑器

Java 程序员 后端

基于JSP实现学校社团管理系统

Java 程序员 后端

喝了杯咖啡,我突然对MySQL锁、事务、MVCC-有了新的认识!

Java 程序员 后端

基于iscsi存储的kvm动态迁移(V2V)

Java 程序员 后端

如何基于 React Native 快速实现一个视频通话应用

声网

flutter 人工智能「

数据服务基础能力之元数据管理

数据分析 数据 元数据 数据管理 业务数据

四、StringRedisTemplate 和RedisTemlate有什么不同

Java 程序员 后端

日均订单量超1500,百度萝卜快跑甩掉Waymo

脑极体

基于二叉树实现Map,就是这么优秀!

Java 程序员 后端

国庆临近,字节后端开发3+4面,终于拿到秋招第一个offer

Java 程序员 后端

推荐你一个正则表达式网站

卢卡多多

正则表达式 11月日更

基于SSM的药店管理系统

Java 程序员 后端

模块三作业

心怀架构

哭了,我居然回答不出来女同事的问题:索引为什么能提供查询性能---

Java 程序员 后端

万文讲解知乎实时数仓架构演进

大数据老哥

基于java+jsp的汽车租赁系统

Java 程序员 后端

基于JSP实现OA办公系统

Java 程序员 后端

基于SSM开发实现中药制剂网站系统

Java 程序员 后端

【死磕 Java 基础】 — 谈谈那个写时拷贝技术(copy-on-write)

chenssy

11月日更 死磕 Java 死磕 Java 基础

基于vue+SpringBoot+MyBatis的开源多商户商城系统,可二次开发

Java 程序员 后端

因为一次 Kafka 宕机,我明白了 Kafka 高可用原理!

Java 程序员 后端

基于java SSM springboot学生信息管理系统设计和实现2

Java 程序员 后端

基于java SSM图书管理系统简单版设计和实现

Java 程序员 后端

基于NFS存储建立WEB群(PCS工具)

Java 程序员 后端

基于 ElasticSearch 实现站内全文搜索

Java 程序员 后端

基于java SSM springboot学生信息管理系统设计和实现2(1)

Java 程序员 后端

基于java的连连看游戏设计

Java 程序员 后端

哪有什么中年危机,不过是把定目标当成了有计划

Java 程序员 后端

基于 ElasticSearch 实现站内全文搜索(1)

Java 程序员 后端

工作五年之后,对技术和业务的思考

程序员 技术 职场 互联网人 业务

图像处理网站

Java 程序员 后端

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