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

如何保存模型外创建的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32