如何使用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
相关产品推荐
相关产品推荐

