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

如何使用pickle保存Keras的StringLookup对象?

结论

你可以使用pickle实现映射关系的保存,也可以选择Keras原生的序列化方案,后者跨环境兼容性更强,更推荐使用。


方案1:pickle序列化

保存代码

import pickle

# 保存字符转数字映射
with open("char_to_num.pkl", "wb") as f:
    pickle.dump(char_to_num, f)

# 保存数字转字符映射
with open("num_to_char.pkl", "wb") as f:
    pickle.dump(num_to_char, f)

加载代码

import pickle

with open("char_to_num.pkl", "rb") as f:
    char_to_num = pickle.load(f)

with open("num_to_char.pkl", "rb") as f:
    num_to_char = pickle.load(f)

注意:该方案要求保存和加载时的Keras版本完全一致,否则可能出现序列化兼容问题。


方案2:Keras原生配置序列化(更推荐)

Keras的StringLookup层本身支持配置导出导入,不依赖pickle,跨版本兼容性更好。

保存代码

import json
from tensorflow.keras.layers import StringLookup

# 导出并保存char_to_num配置
char_to_num_conf = char_to_num.get_config()
with open("char_to_num_conf.json", "w", encoding="utf-8") as f:
    json.dump(char_to_num_conf, f, ensure_ascii=False)

# 导出并保存num_to_char配置
num_to_char_conf = num_to_char.get_config()
with open("num_to_char_conf.json", "w", encoding="utf-8") as f:
    json.dump(num_to_char_conf, f, ensure_ascii=False)

加载代码

import json
from tensorflow.keras.layers import StringLookup

# 重建char_to_num
with open("char_to_num_conf.json", "r", encoding="utf-8") as f:
    char_to_num_conf = json.load(f)
char_to_num = StringLookup.from_config(char_to_num_conf)

# 重建num_to_char
with open("num_to_char_conf.json", "r", encoding="utf-8") as f:
    num_to_char_conf = json.load(f)
num_to_char = StringLookup.from_config(num_to_char_conf)

如果你的映射层需要和模型绑定使用,也可以直接将这两个StringLookup层嵌入模型的前后处理流水线中,保存完整模型时会自动包含层配置,无需单独存储映射关系。


内容的提问来源于stack exchange,提问作者Daniel Aben-Athar Bemerguy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:39:03