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')"
)
:::tips 如何查找可用的Keras Layers?
Alink当前内置的TensorFlow版本为2.3.1,支持的TensorFlow Keras Layer类型详见链接
https://tensorflow.google.cn/versions/r2.3/api_docs/python/tf/keras/layers
:::