Alink教程(Java版)

第25.1.2节 KerasSequential组件

Keras是构建深度学习模型的高阶API,Keras有两种类型的模型:

  • 序贯模型(Sequential):自上而下,依次排列,每层单输入单输出,层与层之间只有相邻关系,没有跨层连接。
  • 函数式模型(Model):需要使用有向图表示,每层相当于图中的一个节点,多输入多输出,层与层之间任意连接。


Alink提供了KerasSequential组件,支持了Keras序贯模型(Sequential),一方面是其输入形式简单,易于理解,可以表示大多数深度模型;另一方面,序贯模型中可以插入TF Hub的预训练模型作为其一层,这种组合提升了序贯模型的模型表现能力和实用性。

Alink的KerasSequential组件分为:KerasSequentialClassifier分类器组件、KerasSequentialRegressor回归器组件。这两个组件分别针对分类场景和回归场景进行了改进,精简了需要用户做的操作。


下面通过一个例子,帮助读者深入理解上面的概念,手写识别MNIST的模型摘要如下

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 784)]             0         
_________________________________________________________________
dense (Dense)                (None, 64)                50240     
_________________________________________________________________
dense_1 (Dense)              (None, 64)                4160      
_________________________________________________________________
dense_2 (Dense)              (None, 10)                650       
=================================================================
Total params: 55,050
Trainable params: 55,050
Non-trainable params: 0
_________________________________________________________________

在计算图中显示隔层的输入和输出内容如下:


使用Keras Python脚本,定义如下。省略了输入层的定义,最后一层的长度与识别的类别总数相同,为10。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential(
    [
        layers.Dense(64, activation='relu'),
        layers.Dense(64, activation='relu'),
        layers.Dense(10),
    ]
)


使用Alink KerasSequential组件表示如下,参数TensorCol为Tensor类型输入列的名称,组件会根据输入数据的shape,确定模型第一层的设置;参数LableCol为标签列的名称,用户不需要统计标签的类别数,不需要将不同类型的标签值统一为索引数,KerasSequentialClassifier组件会根据标签列的数据,自动进行统计和转换,并且在预测的时候,也会自动转换为原始的标签值。用户只需要设置中间各层的信息,每层用一个字符串表示,字符串的内容就是对应的Keras Python脚本中每层的定义代码去掉前缀“layers.”。

new KerasSequentialClassifier()
    .setTensorCol("tensor")
    .setLabelCol("label")
    .setLayers(
    "Dense(64, activation='relu')",
    "Dense(64, activation='relu')"
    )


如何查找可用的Keras Layers?

Alink当前内置的TensorFlow版本为2.3.1,支持的TensorFlow Keras Layer类型详见链接

https://tensorflow.google.cn/versions/r2.3/api_docs/python/tf/keras/layers