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

如何以监督方式训练自动编码器?使Latent Embedding匹配语义嵌入

调整自动编码器实现Latent Embedding匹配语义嵌入

要让自动编码器生成的Latent Embedding匹配语义数据集,你需要构建多输出模型,同时优化两个目标:一是输入数据的重构损失,二是Latent Embedding与语义嵌入的匹配损失。以下是具体调整方案:

1. 修正数据加载(先解决原代码基础错误)

原代码中target_embeddings的加载逻辑错误,MNIST的load_data()返回的是标签而非语义嵌入。假设你已经有了对应训练数据的语义嵌入S_tr(比如将MNIST标签转换为固定维度的嵌入向量),需确保其维度与编码器输出的Latent Embedding一致(比如都是64维)。

2. 重构模型结构

需要显式定义模型的两个输出:重构的输入数据、编码器输出的Latent Embedding,以此同时对两个目标进行优化。

完整调整代码

import tensorflow as tf

# 加载并预处理MNIST数据
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

# 示例:将MNIST标签转换为64维语义嵌入(实际场景替换为你的真实语义数据集)
embedding_layer = tf.keras.layers.Embedding(input_dim=10, output_dim=64)
S_tr = embedding_layer(y_train)

# 定义编码器:输出Latent Embedding(维度与S_tr一致)
encoder = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(64, activation='relu')
])

# 定义解码器:接收Latent Embedding,重构输入图像
decoder = tf.keras.Sequential([
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(28 * 28, activation='sigmoid'),
    tf.keras.layers.Reshape((28, 28))
])

# 构建多输出模型
input_img = tf.keras.Input(shape=(28, 28))
latent_vec = encoder(input_img)
reconstructed_img = decoder(latent_vec)

# 模型输出为[重构图像, Latent Embedding]
multi_output_model = tf.keras.Model(inputs=input_img, outputs=[reconstructed_img, latent_vec])

# 编译模型:定义双损失并设置权重
multi_output_model.compile(
    optimizer='adam',
    loss=['mse', 'mse'],  # 重构用MSE,语义匹配也用MSE(可替换为余弦损失)
    loss_weights=[1.0, 0.5]  # 调整两个损失的权重,按需侧重重构或语义匹配
)

# 训练模型:目标为[输入数据, 语义嵌入S_tr]
multi_output_model.fit(
    x_train,
    [x_train, S_tr],
    epochs=10,
    batch_size=32,
    validation_split=0.1
)

# 训练完成后,提取编码器用于生成匹配语义的Latent Embedding
trained_encoder = multi_output_model.layers[1]
test_latent = trained_encoder(x_test)

关键调整说明

  • 多输出设计:模型同时输出重构图像和Latent Embedding,训练时传入两个目标值[x_train, S_tr],分别对应两个输出的损失计算。
  • 损失权重:通过loss_weights平衡重构损失和语义匹配损失的优先级,若更看重语义匹配,可提高第二个损失的权重。
  • 维度对齐:编码器的输出维度必须与语义嵌入S_tr完全一致,否则无法计算匹配损失。

内容的提问来源于stack exchange,提问作者Rupshali Dasgupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:25:29