当我玩tensorflow教程时,Wide and Deep教程中使用了一个嵌入技巧。
本教程展示了如何将传输稀疏功能(通常是一个热编码)嵌入到矢量中。 我知道有一些方法可以创建这种嵌入,例如字嵌入,PCA或t-SNE或矩阵分解。 但是在本教程中,他们没有展示如何为稀疏矢量创建嵌入。 或者本教程是否只使用神经网络来完成嵌入?
答案 0 :(得分:1)
如果你知道单词嵌入,那么你应该熟悉这种转换。来自"The Deep Model: Neural Network with Embeddings"部分:
嵌入值随机初始化,并与所有其他模型参数一起进行训练,以最大限度地减少训练损失。
基本上,tf.feature_column.embedding_column(occupation, dimension=8)
做的是创建[N, 8]
矩阵,其中N
是occupation
值的数量或桶的数量(如果使用散列分类)列。每个输入occupation
值的作用类似于选择大小为[8]
的嵌入向量的索引。网络的其余部分将使用此[8]
向量,而不知道N
是什么。此向量通常称为密集,以强调长度为N
的单热编码(大多数值为零)与[8]
向量之间的差异,其中所有值均为物质
嵌入是可训练的,因此在随机初始化之后,它们将漂移到某些值,这些值对于网络的其余部分是有用的。这与word2vec或其他单词嵌入非常相似,通常非常有效:
通过密集嵌入,深度模型可以更好地推广并对训练数据中以前未见过的特征对进行预测。
答案 1 :(得分:0)
如果要使用预训练的嵌入。只有您曾经受过word2vec或其他方面的训练。您可以尝试在tf.feature_column.embedding_column Feature Column Pre-trained Embedding
中设置初始值设定项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)