You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:35:11