如何在多输入模型和Dataset场景下使用Keras的Normalization预处理层
Keras多输入模型下预处理层的adapt方法使用方案
核心思路
多输入场景下只需要从数据集里拆分出每个预处理层对应的特征分支,单独调用adapt()即可,不需要对原有模型结构做修改。
具体实现方法
场景1:输入数据为numpy数组
如果你的训练特征是现成的numpy数组,直接给每个预处理层传入对应特征即可,操作和单输入场景完全一致:
# 假设x_train、y_train分别是两个输入对应的numpy训练特征 x_norm.adapt(x_train) y_norm.adapt(y_train)
场景2:输入数据为tf.data.Dataset对象
如果是用Dataset加载的数据,通过map()操作单独抽取每个输入分支的特征序列,再喂给对应预处理层的adapt()方法:
假设你的Dataset返回格式为
(inputs_batch, label_batch),其中inputs_batch是两个输入组成的列表[x_batch, y_batch]
import tensorflow as tf # 抽取所有第一个输入特征构造单独的数据集 x_feature_ds = dataset.map(lambda inputs, label: inputs[0]) # 适配第一个归一化层 x_norm.adapt(x_feature_ds) # 抽取所有第二个输入特征构造单独的数据集 y_feature_ds = dataset.map(lambda inputs, label: inputs[1]) # 适配第二个归一化层 y_norm.adapt(y_feature_ds)
注意事项
adapt()方法仅需要特征数据做统计计算,不需要传入标签,所以map操作直接返回对应分支的特征即可- 适配完成后后续模型训练、推理的逻辑和常规多输入模型完全一致,不需要额外调整
内容的提问来源于stack exchange,提问作者tibbe
相关产品推荐
相关产品推荐

