当我玩tensorflow教程时,宽而深教程中使用了一个嵌入技巧,如下所示。
本教程展示了如何将稀疏特性(通常是一种热编码)转移到嵌入向量。我知道创建这种嵌入的方法有一些,如word嵌入、PCA或there或矩阵分解。但在本教程中,他们没有说明如何为稀疏向量创建嵌入。或者,本教程只是使用神经网络来完成嵌入?
发布于 2018-03-08 10:08:55
如果您知道单词嵌入,那么这种转换应该是您所熟悉的。来自“深度模型:嵌入神经网络”部分:
嵌入值被随机初始化,并与所有其他模型参数一起训练,以最小化训练损失。
本质上,tf.feature_column.embedding_column(occupation, dimension=8)所做的是创建一个[N, 8]矩阵,其中N是使用哈希分类列的occupation值的数量或桶数。每个输入的occupation值都像一个索引,用于选择一个大小为[8]的嵌入向量。网络的其他部分将使用这个[8]向量,而不知道N是什么。这个向量通常被称为稠密,以强调长度N的一次热编码(其中大多数值为零)和[8]向量之间的差异,后者的值都很重要。
嵌入是可训练的,因此在随机初始化之后,它们将漂移到一些对网络的其他部分有用的值。这非常类似于word2vec或其他单词嵌入,并且通常是非常有效的表示:
通过密集的嵌入,深度模型可以更好地推广,并对以前在训练数据中看不到的特征对进行预测。
发布于 2018-07-12 08:12:00
如果你想使用预先训练过的嵌入。只是你曾经接受过word2vec或其他人的训练。您可以尝试在tf.feature_column.embedding_column 特征列预训练嵌入中设置初始化程序。
itemx_vocab = tf.feature_column.categorical_column_with_vocabulary_file(
key='itemx',
vocabulary_file=FLAGS.vocabx)
embedding_initializer_x = tf.contrib.framework.load_embedding_initializer(
ckpt_path='model.ckpt',
embedding_tensor_name='w_in',
new_vocab_size=itemx_vocab.vocabulary_size,
embedding_dim=emb_size,
old_vocab_file='FLAGS.vocab_emb',
new_vocab_file=FLAGS.vocabx
)
itemx_emb = tf.feature_column.embedding_column(itemx_vocab,
dimension=128,
initializer=embedding_initializer_x,
trainable=False)https://stackoverflow.com/questions/49167805
复制相似问题