如何保存Keras模型并将其应用于未见过的文本数据?
多类别文本分类模型的保存与加载方案
1. 保存训练完成的模型
TensorFlow提供两种常用的模型保存方式,按需选择:
SavedModel格式(推荐,包含完整模型信息)
这种格式会生成一个文件夹,包含模型结构、权重、编译配置等所有信息,适合后续部署或继续训练:
# 指定保存目录,自动创建文件夹 model.save('text_classification_model')
HDF5单文件格式
如果需要单文件存储,可以保存为.h5格式:
model.save('text_classification_model.h5')
2. 加载模型并预测未见过的文本
步骤1:加载模型
由于你的模型使用了TensorFlow Hub的hub_layer,加载时需要指定custom_objects让Keras识别该自定义层,避免报错:
import tensorflow as tf import tensorflow_hub as hub # 加载SavedModel格式模型 loaded_model = tf.keras.models.load_model( 'text_classification_model', custom_objects={'KerasLayer': hub.KerasLayer} ) # 若加载.h5格式模型,代码类似 loaded_model = tf.keras.models.load_model( 'text_classification_model.h5', custom_objects={'KerasLayer': hub.KerasLayer} )
步骤2:预处理未见过的文本
必须保证预处理流程和训练数据完全一致,比如你处理train_data_f时用的文本清洗、分词、向量化等操作,要原样应用到df['Unseen_Text']:
# 示例:替换为你实际的预处理函数 def preprocess_text(texts): # 这里写你的预处理逻辑:比如转小写、去除特殊字符、用hub_layer的预处理等 processed = hub_layer.preprocess(texts) return processed # 对未见过的文本做预处理 preprocessed_text = preprocess_text(df['Unseen_Text'])
步骤3:执行预测
# 获取每个样本的类别概率(18个类别的概率分布) predictions = loaded_model.predict(preprocessed_text, verbose=0) # 获取概率最大的类别索引 predicted_class_indices = predictions.argmax(axis=1) # (可选)如果有类别名称映射,将索引转为实际类别名 # 假设你有类别列表:category_names = ["类别1", "类别2", ..., "类别18"] df['Predicted_Category'] = [category_names[idx] for idx in predicted_class_indices]
额外注意点
你当前代码中的编译配置存在一处不合理:输出层用了softmax激活,但CategoricalCrossentropy的from_logits设为True,这会导致计算损失时重复处理概率,建议修正为:
model.compile( optimizer='adam', loss=tf.keras.losses.CategoricalCrossentropy(from_logits=False), metrics=['accuracy'] )
内容的提问来源于stack exchange,提问作者Django0602
相关产品推荐
相关产品推荐

