【Tensorflow2.0】3、 tf.keras介绍


本文将介绍tf.kears API的使用方法以及它的实现方法,主要参考keras作者对keras的 介绍(需要科学上网)。包括:

  • Keras Architecture keras的结构
  • Layers 和 Models 两个类
  • 函数式模型 functional models
  • 函数式模型的特征 features to functional models
  • 训练和推理 Training & Inference
  • 损失函数和性能评价指标 losses & metrics
    以上部分写英文是为了看tensorflow官网时方便对应中英文

一、keras结构概述

主要包括keras的子模块和类。

Engine(模型定义和推理,model define & execution) 基本类:
  • 基础类Layer:是定义各种layer的基础
  • 基础类Network:定义网络结构
  • 基础类Modle:Network+training/eval loops
  • 基础类Sequential:序列模型是Model的一种
Layers:
  • 各种Layer的子类subclasses
Losses,Metrics:
  • 基础类Metric
  • 基础类Loss
  • 各种Metric & Loss的子类,可用于不同的需求
回调callbacks:
  • 基础类Callback
  • 各种Callback的子类,可用于不同的需求
优化器Optimizers:
  • 基础类Optimizer
  • 各种Optimizer的子类,可用于不同的需求
正则化Regularizers,Constraints

以下主要说明Engine,Losses,Metrics,其它部分简单介绍。其中任何一个内容都可以讲好向章书的内容,所以我们只关注最重要的信息。

二、Layer 类说明

Layer层可以执行的功能

1、Computation from a batch of inputs to a batch of outputs
  • Works in eager execution and graph execution
  • Supports a training mode and an inference mode
  • Supports masking(for time series and missing features)

Layer是keras API中的核心,是构建基它内容的基础,所以keras的所有内容基本上就是Layer。Layer有许多作有,所以内建了大量的features,它将作为一个容器来执行一些运算,把batch的输入数据转换成batch的输出。所有的内建层都支持eager execution和graph execution这两种模式,但用户自定义的层只支持eager模式,有些层只支持eager模式比如recursive layer,SEMs。另外每一层有两种状态训练状态和推理状态,比如dropout和batchnorm层,每一层会记忆timesteps和其它相关状态来选择切换状态,这种适用于sequence序列处理。

2、Manage state(trainable weights, non trainable weights)
  • 管理那些参数是可训练的,那些是不可训练由人来定义的。
3、Tracks losses &metrics(can be created during ‘call’),and update than can be disabled on demand
  • 自动跟踪记录损失值和相关的评价指标
4、“Type checking”
  • 调用一个层的时候,自动检查数据类型是否正确
  • 支持静态形状推理,可帮助用户检查数据形状是否正确
5、Can be frozen or unfrozen(for fine-tuning,transfer learning ,GANS)
  • 可以固化参数使其保持不变,或解固化。因化对于transfer learning之类的很有用。
6、Can be serialized/deserized(configuration-only) or saved/loaded(weight values)
  • 模型的保存与加载
7、可以用来构建模型(Functional APi),函数式编程
8、(soon)即将支持混合精度mix precision:
  • 将来会内建混合精度

Layer不具有的功能

1、不支持计算梯度Gradients(under consideration)
  • 层不支持反向传播和计算梯度,但开发人员正在考虑加上这个功能,加一个gradient的方法
2、不支持较底层的配置设置(low level api)\
  • 比如设备配置(device placement)
3、不支持分布式计算
  • 不包括特定的分布逻辑
4、只支持batchwish的计算
  • 任何张量tensor不是以N 个样本开头和以N个样本结束,都不支持,也就是说要有N个samples输入,就要有N个sample输出,没有输入或没有输出的都不能用Layer
5、“Type checking ”
  • no datasets,no non-batch computation,no output-less or input-less processing
    也就是说不能没有数据,不能是非batch的计算,不能少输出或少输入(看到7分16秒)

最长用的layer

class Linear(tf.keras.layers.Layer):
    
    def __init__(self,units=32,input_dim=32):
        super(Linear,self).__init__()
        self.w=tf.Variable(initial_value=tf.random_normal_initializer()(shape=(input_dim,units)),trainable=True)
        self.b=tf.Variable(initial_value=tf.zeros_initializer()(shape=(units,)),trainable=True)
        
    def call(self,inputs):
        return tf.matmul(inputs,self.w)+self.b
    
x = tf.ones((2,2))

linear_layer = Linear(4,input_dim=2)
#linear_layer.trainable_weights==[w,b] #自动加入到trainable_weights里
y = linear_layer(x)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值