如何将多个输入与embedding合并后接入自编码器的单一输入层
解决方法
错误原因
你当前的问题是额外定义了独立的input_layer,将前序的多输入embedding分支和自编码器拆成了两个互不连通的计算图,自然无法对接。不需要单独新增中间输入层,直接把拼接后的张量merge_models作为编码器的输入即可。
修改后的代码
你只需要调整自编码器部分的代码即可,前序的输入定义、embedding构建、特征拼接逻辑保持不变:
merge_models = tf.keras.layers.concatenate(models) # 删掉原代码中额外定义的input_layer,直接用拼接结果作为编码器输入 # Encoder encoder = Dense(16, activation='relu')(merge_models) encoder = Dense(8, activation='relu')(encoder) encoder = Dense(4, activation='relu')(encoder) # Bottleneck z = Dense(2, activation='relu')(encoder) # Decoder decoder = Dense(4, activation='relu')(z) decoder = Dense(8, activation='relu')(decoder) decoder = Dense(16, activation='relu')(decoder) input_dim = merge_models.shape[1] decoder = Dense(input_dim, activation='elu')(decoder) # 实例化模型时,输入用你最开始收集的所有原始输入节点列表inputs即可 from tensorflow.keras.models import Model autoencoder = Model(inputs = inputs, outputs = decoder, name = 'ae_toy_example')
注意事项
Keras函数式API基于张量的计算流构建完整网络,你最开始收集到inputs列表里的所有原始输入(数值特征输入、二分类特征输入、各分类特征的embedding输入)就是整个模型的输入节点,计算流从这些节点出发,经过embedding、拼接、编码、解码最终输出重构结果,所以实例化模型时直接传入inputs列表即可。
训练模型时,喂入的输入数据顺序要和inputs列表里的节点顺序完全对应:即顺序为「数值特征数组、二分类特征数组、第一个待embedding列的数组、第二个待embedding列的数组……」。
内容的提问来源于stack exchange,提问作者Stu
相关产品推荐
相关产品推荐

