写点什么

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

评论

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

预测猝死时间:AI与死神的争夺

脑极体

OpenMLDB Pulsar Connector:高效打通实时数据到特征工程

第四范式开发者社区

数据库 数据传输 OpenMLDB 特征 特征平台

Spring核心流程分析

IT巅峰技术

云效钉钉小程序上线啦!业务方请痛快一键三连

阿里云云效

阿里云 云原生 钉钉 研发 云效钉钉小程序

Flutter 使用 Dio 的 Post 请求添加数据

岛上码农

flutter ios 安卓开发 4月月更 跨平台开发

2022年,我加入了微软MVP大家庭

不脱发的程序猿

开源社区 技术影响力 微软MVP

一文读懂Seek Tiger推出创世节点的意义

西柚子

MongoDB Java 原生使用示例

Java mongodb 4月月更

虎符交易所完成三月份HOO回购 生态板块持续扩展

区块链前沿News

Hoo 虎符交易所 回购

linux之sshpass命令

入门小站

Linux

模块三作业(学生管理系统架构设计文档)

Dean.Zhang

Go 语言入门很简单:sort 包

宇宙之一粟

排序 Go 语言 4月月更

活动精彩预告 | 维塔士+龙智:数字化打造游戏行业「头号玩家」

龙智—DevSecOps解决方案

数字化转型 游戏开发 游戏引擎

热敏电阻、RTD、热电偶的原理和特性

不脱发的程序猿

PT100 热敏电阻 RTD 热电偶

架构训练营 - 模块 3- 作业

kenlu

学生管理系统详细架构设计文档

踩着太阳看日出

架构训练营

[Day21]-[动态规划] 494. 目标和

方勇(gopher)

LeetCode 动态规划 数据结构算法

事务的隔离级别与MVCC

蝉沐风

MySQL 事务隔离级别 事务

Grpc服务开发和接口测试初探【Java】

FunTester

阿里云移动研发平台EMAS,3月产品动态

移动研发平台EMAS

ios 阿里云 移动应用 Andriod 移动推送

外包学生管理系统

流火

Linux下BusyBox根文件系统制作

DS小龙哥

4月月更

你不知道的 parseInt?

战场小包

JavaScript 前端 4月月更

睡眠革命

石刻掌纹

在线CSV转XML工具

入门小站

工具

Robot OS网络通信MQTT实战

轻口味

c++ android IoT mqtt 4月月更

spring-cloud-kubernetes与k8s的configmap

程序员欣宸

Java 4月月更

Pipy MQTT 代理之(三)Logging

Flomesh

IoT 代理 mqtt Pipy

在线YAML转JSON工具

入门小站

工具

Python 中删除列表元素的三种方法

AlwaysBeta

Python List 编程 程序员 列表

Python图像处理丨OpenCV+Numpy库读取与修改像素

华为云开发者联盟

Python OpenCV 图像处理 Numpy库 像素

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