TensorFlow多输入模型训练报错:数据基数模糊问题解决
解决双输入文本分类模型的Data cardinality报错问题
报错核心原因
这个报错本质是输入数组的形状与模型定义的输入形状不兼容。模型中text_input和subject_input的shape都定义为(1,),但如果你的x_train_text或x_train_subject是一维数组(形状为(4499,)),Keras会误判其样本数,导致和标签的4499个样本不匹配。
具体修复步骤
1. 调整输入数据的形状
将一维的输入数组转为二维(形状为(4499, 1)),匹配模型输入层的要求:
import numpy as np # 给文本输入增加维度 x_train_text = np.expand_dims(x_train_text, axis=1) # 给subject输入增加维度 x_train_subject = np.expand_dims(x_train_subject, axis=1)
2. 验证输入形状
调整后打印形状确认是否符合要求:
print(x_train_text.shape) # 预期输出:(4499, 1) print(x_train_subject.shape) # 预期输出:(4499, 1) print(y_train_int.shape) # 预期输出:(4499,) 或 (4499, 1)
3. 可选:用字典形式传递输入
如果调整形状后仍有问题,可改用字典明确对应模型的输入层:
history = model.fit( { "input_1": x_train_text, # 名称可从model.summary()的输入层查看 "input_2": x_train_subject }, y=y_train_int, epochs=epochs )
也可以在定义输入层时指定自定义名称,比如text_input = tf.keras.Input(shape=(1,), dtype=tf.string, name="text_input"),后续字典key就用"text_input"。
额外检查项
- 确认
vectorize_layer已通过adapt方法适配过训练数据格式,避免向量化时出错。 - 确认
CategoryEncoding的num_tokens参数值等于subject的类别总数,防止后续拼接维度不匹配。
内容的提问来源于stack exchange,提问作者cuneyttyler
相关产品推荐
相关产品推荐

