特征列预训练嵌入

问题描述 投票:0回答:1

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

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

错误是:

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

这是我的代码:

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)

我尝试过initializer = lambda w:W。像这样:

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

它报告错误:

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

python tensorflow tensorflow-estimator
1个回答
1
投票

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

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

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

码:

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)
© www.soinside.com 2019 - 2024. All rights reserved.