首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特征列预训练嵌入

特征列预训练嵌入
EN

Stack Overflow用户
提问于 2018-07-09 01:58:06
回答 2查看 1.1K关注 0票数 1

如何使用预先训练的嵌入与tf.feature_column.embedding_column

我在tf.feature_column.embedding_column中使用了tf.feature_column.embedding_column嵌入。但不起作用。错误是

错误是:

ValueError:初始化程序必须是可调用的,如果指定的话。Column_name的嵌入: itemx

这是我的密码:

代码语言:javascript
复制
weight, vocab_size, emb_size = _create_pretrained_emb_from_txt(FLAGS.vocab, 
FLAGS.pre_emb)

W = tf.Variable(tf.constant(0.0, shape=[vocab_size, emb_size]),
                trainable=False, name="W")
embedding_placeholder = tf.placeholder(tf.float32, [vocab_size, emb_size])
embedding_init = W.assign(embedding_placeholder)

sess = tf.Session()
sess.run(embedding_init, feed_dict={embedding_placeholder: weight})

itemx_vocab = tf.feature_column.categorical_column_with_vocabulary_file(
    key='itemx',
    vocabulary_file=FLAGS.vocabx)

itemx_emb = tf.feature_column.embedding_column(itemx_vocab,
                                               dimension=emb_size,
                                               initializer=W,
                                               trainable=False)

我尝试过初始化= lambda w:W.如下所示:

代码语言:javascript
复制
itemx_emb = tf.feature_column.embedding_column(itemx_vocab,
                                               dimension=emb_size,
                                               initializer=lambda w:W,
                                               trainable=False)

它报告了错误:

TypeError:()得到一个意外的关键字参数'dtype‘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-11 08:00:39

我在这里也有一个问题,https://github.com/tensorflow/tensorflow/issues/20663

最后,我找到了一个正确的解决方法。尽管如此。我不清楚为什么上面的答案无效!如果你知道这个问题,谢谢你给我一些建议!

好的,这是当前的解决方案。实际上从这里开始,Feature Columns Embedding lookup

代码:

代码语言:javascript
复制
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)
票数 2
EN

Stack Overflow用户

发布于 2020-04-14 18:14:23

还可以将数组包装为如下函数:

代码语言:javascript
复制
some_matrix = np.array([[0,1,2],[0,2,3],[5,6,7]])

def custom_init(shape, dtype):
    return some_matrix

embedding_feature = tf.feature_column.embedding_column(itemx_vocab, 
                                                       dimension=3, 
                                                       initializer=custom_init
                                                       )

这是一种麻木不仁的方式,但能做好这项工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51237419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档