【问题标题】:Feature Column Pre-trained Embedding特征列预训练嵌入
【发布时间】:2018-12-16 15:47:25
【问题描述】:

如何通过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)

我已经尝试过初始化程序 = 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】:

    您也可以将数组包装成这样的函数:

    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
                                                           )
    
    

    这是一种 hacky 方式,但可以完成工作。

    【讨论】:

      【解决方案2】:

      我也在这里提一个问题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)
      

      【讨论】:

        猜你喜欢
        • 2020-02-05
        • 1970-01-01
        • 2020-03-19
        • 2016-03-14
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        • 2019-12-30
        • 1970-01-01
        相关资源
        最近更新 更多