Python实现推特分类LSTM网络时出现ValueError错误如何解决
错误定位
本次报错的触发点为调用train函数时传入class_weights参数的代码行:
class_weights= model.any(cws)
错误信息提示的数组布尔判断歧义,来源于两个问题:
- 此处的
model是你定义的model_1函数对象,本身不具备any方法,你属于把cws.any()的写法顺序写反,错误调用了不存在的方法。 - 即便修正为
cws.any(),返回的是布尔值(True/False),但Keras的fit方法要求class_weight参数只能是None或者键为类别索引、值为对应权重的字典,传入布尔值完全不符合参数格式要求,会触发后续的类型校验错误。
修复方案
根据你的使用场景二选一即可:
- 不需要使用类别权重:直接删除
class_weights= model.any(cws)这行参数即可,train函数默认会给该参数赋值None,符合Keras的参数要求。 - 需要使用提前计算的
cws作为类别权重:先将数组格式的cws转换为符合要求的字典,再传入参数:
# 3分类任务将数组转权重字典 class_weight_dict = {i: weight for i, weight in enumerate(cws)} # 调用train函数时传入 m1 = train(model_1, train_text_vec, y_train, test_text_vec, y_test, checkpoint_path='model_1.h5', class_weights=class_weight_dict)
额外提示:你定义的
train函数里参数epcohs为拼写错误,正确拼写为epochs,不影响本次报错,但后续调整训练轮次时可能引发预期外的问题。
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

