Keras报错:意外关键字参数'class_mode',句子分类模型复现求助
解决Keras中"got an unexpected keyword argument 'class_mode'"错误
看起来你在复现句子分类模型时踩了版本兼容的坑——这个错误几乎都是因为新版本Keras(或TensorFlow整合的Keras)移除了class_mode参数,换成了更清晰的label_mode,或者某些函数根本不再支持这个参数了。下面给你具体的排查和解决步骤:
一、先确认你的Keras/TensorFlow版本
首先跑两行代码看看你用的是哪个版本:
import tensorflow as tf print(tf.__version__) # 如果你用的是TensorFlow自带的Keras # 或者 import keras print(keras.__version__) # 如果你单独安装了Keras
如果版本是TensorFlow 2.15+或者Keras 3.x,那class_mode确实已经被弃用了。
二、替换参数名(最常见的解决方式)
如果你是在数据加载类的函数里用了class_mode(比如text_dataset_from_directory、image_dataset_from_directory这类),直接把class_mode改成label_mode就行。举个例子:
原来的错误代码
train_ds = tf.keras.preprocessing.text_dataset_from_directory( "./train_data", class_mode="categorical" )
修改后
train_ds = tf.keras.preprocessing.text_dataset_from_directory( "./train_data", label_mode="categorical" # 把class_mode换成label_mode )
label_mode的可选值和原来class_mode基本一致:"categorical"(多分类one-hot标签)、"binary"(二分类)、"int"(整数标签)。
三、如果是在模型训练时误用了class_mode
要是你在model.fit()或者model.compile()里加了class_mode,那这个参数本来就不属于这些函数,直接删掉就行。分类任务的类型是通过损失函数和标签格式来控制的:
- 二分类任务:损失用
binary_crossentropy,标签是0/1的整数 - 多分类任务:损失用
categorical_crossentropy,标签要转成one-hot向量(用tf.keras.utils.to_categorical())
另外,看你提供的代码片段还不完整,顺便提一句:别忘了提取训练和测试的标签,并且转换成Keras能识别的格式,比如:
# 补全数据处理部分 train_labels = [label for (txt, label) in data[0:train_size]] test_labels = [label for (txt, label) in data[train_size:]] # 如果是多分类,把标签转成one-hot import tensorflow as tf num_classes = len(set(train_labels)) train_labels = tf.keras.utils.to_categorical(train_labels, num_classes=num_classes) test_labels = tf.keras.utils.to_categorical(test_labels, num_classes=num_classes)
内容的提问来源于stack exchange,提问作者user2505650
相关产品推荐
相关产品推荐

