在模型内部和模型外部使用嵌入层有什么区别?我可以将嵌入层构建到模型中:
model = tf.keras.Sequential()
model.add(tf.keras.layers.Embedding(input_dim=1000, output_dim=64, input_length=10))
...
model.fit(features, target ...)
我还可以在模型外部使用embdedding来生成嵌入式数据,然后将其输入模型:
embedding_encoder = tf.keras.layers.Embedding(input_dim=1000, output_dim=64)
embedded_features = embedding_encoder(features)
...
model.fit(embedded_features, target ...)
这是否意味着,如果我在模型外使用嵌入,在训练过程中就不会学习到嵌入参数?
1条答案
按热度按时间fcipmucu1#
这是否意味着,如果我在模型外使用嵌入,在训练过程中就不会学习到嵌入参数?
从
Embedding
图层分配的密集矢量表示通常只有在设置trainable=True
时才可训练。这完全取决于您希望如何自己预处理数据以及希望留给Embedding
图层多少数据。通常,如果您正在处理NLP任务,您可以在添加Embedding
层之前添加StringLookup
或TextVectorization
层,这样您就可以对文本进行预处理,并以一种优雅的方式训练它们,而无需任何“手动”步骤。一般情况:
输入到
Embedding
图层的每个整数值都Map到唯一的N维矢量表示,其中N由您选择。默认情况下,这些矢量表示是从均匀分布中绘制的。Embedding
图层继承自包含可训练参数的tf.keras.layers.Layer
。我认为在模型外生成嵌入数据是有意义的,例如,如果你使用预先训练的上下文相关向量,并且你不想在训练过程中更新它们的值,但这一切都取决于你。