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

TensorFlow 2.9.1中Keras函数式API字符串输入模型报错咨询

问题解决:TensorFlow 2.9.1构建混合数值/分类数据模型

错误原因

你代码里的核心问题是把InputLayer实例直接传给了StringLookup层,但Keras的层只能接收张量(Tensor)作为输入,InputLayer是Keras内部管理输入的底层类,不能直接作为后续层的输入。另外导入TensorFlow的语法也有误,import tensorflow==2.9.1是无效写法,版本指定应该在安装时完成(比如pip install tensorflow==2.9.1),导入时只需写import tensorflow as tf。

修正后的分类数据处理代码

先把你最初的代码修正为可运行版本:

import tensorflow as tf

# 用Input()创建输入张量,而非直接实例化InputLayer
input_tensor = tf.keras.layers.Input(shape=(1,), dtype=tf.string)
# 现在可以正常将张量传入StringLookup层
string_lookup_layer = tf.keras.layers.StringLookup(vocabulary=["a", "b"], output_mode="one_hot")(input_tensor)

完整混合数据模型示例

下面是同时处理数值型和分类型数据的完整模型代码,涵盖从输入定义到模型构建的全流程:

import tensorflow as tf

# 1. 定义各特征的输入张量
# 数值特征输入:假设是单个连续数值
numeric_input = tf.keras.layers.Input(shape=(1,), dtype=tf.float32, name="numeric_feature")
# 分类特征输入:单个字符串类型的分类值
categorical_input = tf.keras.layers.Input(shape=(1,), dtype=tf.string, name="categorical_feature")

# 2. 处理分类特征:将字符串映射为独热编码
lookup_layer = tf.keras.layers.StringLookup(
    vocabulary=["a", "b"],  # 分类特征的所有可能取值
    output_mode="one_hot"
)(categorical_input)

# 3. 合并多类型特征:将数值特征和处理后的分类特征拼接
concatenated_features = tf.keras.layers.concatenate([numeric_input, lookup_layer])

# 4. 构建后续网络层
hidden_layer = tf.keras.layers.Dense(32, activation='relu')(concatenated_features)
# 这里假设是二分类任务,输出层用sigmoid激活
output_layer = tf.keras.layers.Dense(1, activation='sigmoid')(hidden_layer)

# 5. 定义完整模型,指定所有输入和输出
model = tf.keras.Model(inputs=[numeric_input, categorical_input], outputs=output_layer)

# 查看模型结构
model.summary()

关键注意点

  • 每个输入特征都需要用tf.keras.layers.Input()创建对应的张量,这是Keras模型的标准输入方式。
  • 分类型数据必须先通过StringLookup(或CategoryEncoding等层)转换为数值形式,才能被神经网络处理。
  • 混合特征需要通过concatenate层合并后,再送入后续的全连接或其他层进行计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:30:59