报错ValueError:无法将NumPy数组转换为Tensor(不支持NoneType)
解决ValueError:无法将NumPy数组转换为Tensor(不支持NoneType)
错误信息
已发生异常:ValueError
无法将NumPy数组转换为Tensor(不支持的对象类型为NoneType)。
文件"C:\Users\rdterrte\fghfghfg\dfgdgfd\fhggdffd\chatbot.py",第35行,位于predict_class函数中
res = model.predict(np.asarray([bow]))[0]
文件"C:\Users\rdterrte\fghfghfg\dfgdgfd\fhggdffd\chatbot.py",第58行
ints = predict_class(message)
ValueError: 无法将NumPy数组转换为Tensor(不支持的对象类型为NoneType)。
问题根源
bag_of_words函数逻辑缺陷:当输入句子没有匹配到任何预定义词汇时,函数无返回值(即返回None),导致传入model.predict的bow为None类型,触发Tensor转换失败。- 提前返回错误:原
bag_of_words在匹配到第一个词后直接return,后续词汇无法被处理,生成的bag数组不完整。 - 变量名不一致:
predict_class中定义了result变量,却调用results.sort(),会引发NameError。 - 循环内返回错误:
predict_class的return语句在for循环内部,只会返回第一个匹配的intent,无法返回完整结果列表。
修复方案
1. 修复bag_of_words函数
确保无论是否匹配到词汇,都返回有效NumPy数组,移除提前返回逻辑:
def bag_of_words(sentence): sentence_words = clean_up_sentence(sentence) bag = [0] * len(words) for w in sentence_words: for i, word in enumerate(words): if word == w: bag[i] = 1 # 始终返回NumPy数组,无匹配时返回全0数组 return np.array(bag)
2. 修复predict_class函数
修正变量名、调整返回位置,并添加健壮性判断:
def predict_class(sentence): bow = bag_of_words(sentence) # 健壮性处理:避免意外None值 if bow is None: bow = np.zeros(len(words)) res = model.predict(np.array([bow]))[0] ERROR_THRESHOLD = 0.25 # 修正变量名与后续调用一致 results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD] results.sort(key=lambda x: x[1], reverse=True) return_list = [] for r in results: return_list.append({'intent': classes[r[0]], 'probability': str(r[1])}) # 将return移出循环,返回完整结果列表 return return_list
内容的提问来源于stack exchange,提问作者marko_digital_money
相关产品推荐
相关产品推荐

