You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将float类型数据与one-hot向量组合为单条样本输入Keras层?

Keras混合数值型与One-Hot分类型特征的输入处理方案

注意:Keras输入层不支持嵌套数组格式的张量输入,你预期的[float, float, float, [one-hot-vector]]嵌套结构无法直接传入模型,可选择以下两种主流方案处理

方案1:直接展平合并为单维向量(最简实现,适配大部分场景)

将one-hot向量直接展开为独立的float元素,和前面的连续特征拼接为一维数组即可直接喂给普通Keras层。
以你给出的样例数据[0.1, 0.2, 0.4, [0,0,0,1]]为例,展平后得到一维数组[0.1, 0.2, 0.4, 0, 0, 0, 1],所有元素均为float类型,符合Keras输入要求。
批量数据处理代码示例:

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 模拟两类特征数据
# continuous_feat维度:(样本数, 连续特征数量)
continuous_feat = np.array([[0.1, 0.2, 0.4], [0.5, 0.3, 0.2]], dtype=np.float32)
# one_hot_feat维度:(样本数, one-hot编码长度)
one_hot_feat = np.array([[0,0,0,1], [1,0,0,0]], dtype=np.float32)

# 横向拼接两类特征
train_x = np.concatenate([continuous_feat, one_hot_feat], axis=1)

# 直接定义对应维度的输入层即可
model = Sequential()
model.add(Dense(16, activation='relu', input_shape=(7,)))
model.add(Dense(1, activation='sigmoid'))

适用场景:不需要对两类特征做差异化特征提取、特征总维度不高的场景。

方案2:多输入分支合并(适配需要单独处理两类特征的场景)

如果需要给连续特征、one-hot特征分别配置不同的特征处理层,可以用Keras函数式API搭建多输入分支,在模型内部完成特征合并。
代码示例:

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense, Concatenate

# 定义两个独立输入分支
input_continuous = Input(shape=(3,), name='continuous_input')
input_onehot = Input(shape=(4,), name='onehot_input')

# 两个分支可以单独配置不同的处理层
dense_continuous = Dense(8, activation='relu')(input_continuous)
dense_onehot = Dense(4, activation='relu')(input_onehot)

# 合并两个分支的输出特征
merged_feat = Concatenate(axis=1)([dense_continuous, dense_onehot])

# 后续接全局任务层
output = Dense(1, activation='sigmoid')(merged_feat)

# 初始化模型
model = Model(inputs=[input_continuous, input_onehot], outputs=output)

# 训练时分别传入两类特征即可
# model.fit([continuous_feat, one_hot_feat], 标签数组, epochs=10, batch_size=32)

适用场景:需要对one-hot特征做降维、或对连续特征做特殊变换的个性化建模场景。

内容的提问来源于stack exchange,提问作者prze gee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:54:03