如何保存模型外创建的Embedding层并应用于新句子预测?
保存并复用外部训练的Embedding层
一、保存训练后的Embedding层
你的Embedding层在模型外定义且设为trainable=True,训练过程中它的权重会随模型更新。训练完成后,可通过两种方式保存:
方法1:保存整个Embedding层
# 训练结束后保存完整层 embedding_sentence.save("trained_embedding_layer")
方法2:仅保存权重(轻量化方案)
# 只保存层的权重参数 embedding_sentence.save_weights("embedding_weights.h5")
二、加载Embedding层处理新句子
预测前需对新句子执行和训练阶段完全一致的向量化操作(比如复用训练时的Tokenizer),再用加载的Embedding层生成嵌入向量,最后输入训练好的模型完成预测。
情况1:加载完整保存的层
# 加载已保存的Embedding层 loaded_embedding = tf.keras.models.load_model("trained_embedding_layer") # 新句子向量化(必须用训练时的Tokenizer,保证词汇表一致) new_vectorized = tokenizer.texts_to_sequences(new_sentences) new_vectorized = tf.keras.preprocessing.sequence.pad_sequences(new_vectorized, maxlen=your_training_maxlen) # 生成嵌入向量 new_embedded = loaded_embedding(new_vectorized) # 输入模型得到预测结果 predictions = model(new_embedded)
情况2:加载权重到新的Embedding层
若仅保存了权重,需先创建结构完全匹配的Embedding层,再加载权重:
# 创建和原层结构一致的Embedding层(预测时建议设为不可训练) loaded_embedding = tf.keras.layers.Embedding(vocab_size, model_dimension, trainable=False) # 先传入一个dummy张量初始化层结构 dummy_input = tf.random.uniform((1, your_training_maxlen), maxval=vocab_size, dtype=tf.int32) loaded_embedding(dummy_input) # 加载保存的权重 loaded_embedding.load_weights("embedding_weights.h5") # 后续处理同情况1 new_vectorized = tokenizer.texts_to_sequences(new_sentences) new_vectorized = tf.keras.preprocessing.sequence.pad_sequences(new_vectorized, maxlen=your_training_maxlen) new_embedded = loaded_embedding(new_vectorized) predictions = model(new_embedded)
关键注意点
- 新句子的向量化逻辑必须和训练时完全对齐:复用同一个Tokenizer、相同的
maxlen、保持词汇表映射关系一致,否则生成的嵌入向量无效。 - 预测阶段将Embedding层设为
trainable=False,可避免权重被意外修改。
内容的提问来源于stack exchange,提问作者JYWQ
相关产品推荐
相关产品推荐

