如何为聊天机器人神经网络设置输入形状,解决预测时维度不匹配报错
问题根因
你的模型输入层指定的单条样本特征维度为(46,),训练阶段输入的是形状为(26, 46)的批量数据(26条样本,每条46维特征)。预测阶段出现报错有两个可能原因:
bag_of_words函数返回的单条样本特征长度不是46,维度不匹配- 没有给单条样本补充批量维度,Keras的
predict接口要求输入必须包含批量维度,哪怕只有一条样本,也需要封装为(1, 46)的形状
解决步骤
- 第一步:先验证
bag_of_words函数输出
打印bag_of_words(inp, words)的形状,确认输出是长度为46的一维数组,如果长度不符,需要调整词袋生成逻辑,和训练时的特征提取规则保持一致。 - 第二步:调整预测代码的输入格式
把chat函数里的预测行:
修改为以下任意一种即可:results = model.predict([bag_of_words(inp, words)])# 方法1:增加批量维度 results = model.predict(numpy.expand_dims(bag_of_words(inp, words), axis=0)) # 方法2:直接reshape为批量格式 results = model.predict(bag_of_words(inp, words).reshape(1, -1))
额外优化建议
你的输出层用了softmax激活函数,属于多分类任务,训练时的损失函数binary_crossentropy是二分类/多标签分类用的,替换为categorical_crossentropy训练效果会更好。
内容的提问来源于stack exchange,提问作者acrid
相关产品推荐
相关产品推荐

