情感分析模型fit时遇NoneType不可调用与歧义真值系列问题
问题分析与解决方法
核心问题1:validation_data参数传递错误
你当前使用val_data.empty作为validation_data的取值,这完全不符合model.fit()的参数要求:
val_data.empty是一个布尔值(True/False),但validation_data需要接收**(验证输入数据, 验证标签数据)**的元组,或兼容的数据集对象。- 之前直接传
val_data出现的错误,是因为你把整个DataFrame传入,fit无法自动识别哪列是输入、哪列是标签。
修正代码
将validation_data改为元组形式,传入验证集的文本和标签:
history = classifier_model.fit( x=train_data['clean_text'], y=train_data['sentiment'], validation_data=(val_data['clean_text'], val_data['sentiment']), epochs=epochs )
核心问题2:标签数据形状不匹配模型预期
从你给出的模型预期输入来看,标签需要是(None, 1)的float32格式,但train_data['sentiment']是一维Series(形状(534,)),这会导致模型输入不兼容。
修正代码
把标签转换成二维数组:
# 转换训练集标签形状 train_labels = train_data['sentiment'].values.reshape(-1, 1) # 转换验证集标签形状 val_labels = val_data['sentiment'].values.reshape(-1, 1) # 重新调用fit history = classifier_model.fit( x=train_data['clean_text'], y=train_labels, validation_data=(val_data['clean_text'], val_labels), epochs=epochs )
额外检查:确保文本输入格式兼容
如果模型基于TensorFlow Hub的BERT构建,若仍有问题,可将文本数据转为numpy数组再传入:
train_text = train_data['clean_text'].values val_text = val_data['clean_text'].values history = classifier_model.fit( x=train_text, y=train_labels, validation_data=(val_text, val_labels), epochs=epochs )
总结
你遇到的TypeError: 'NoneType' object is not callable本质是传递了错误的validation_data参数(布尔值),导致模型内部逻辑出错。先修正validation_data的格式,再调整标签形状匹配模型预期,即可解决问题。
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

