【问题标题】:How to sum up values according to indices in a different vector using keras / tensorflow?如何使用 keras / tensorflow 根据不同向量中的索引对值求和?
【发布时间】:2019-09-01 11:41:47
【问题描述】:

我是新来的,我有一个关于 Keras / Tensorflow 中张量索引的问题要问:

我有一个长度为N 的向量,它包含词汇表中单词的索引(索引可能重复)。这个向量代表一个句子,例如(40, 25, 99, 26, 34, 99, 100, 100...) 我还有另一个向量,或者实际上是一个矩阵(因为它是一组示例),长度相同N,其中原始向量中的每个单词都被分配了一个权重W_i。我想总结整个句子中特定单词的权重,以便我可以从单词索引到句子中该单词的权重总和得到一个映射,并且我想以矢量化的方式进行。 例如,假设句子是(1, 2, 3, 4, 5, 3),权重是(0, 1, 0.5, 0.1, 0.6, 0.5),我希望结果是一些映射:

1->0
2->1
3->1
4->0.1
5->0.6

如何在不需要遍历每个元素的情况下实现类似的效果?我在想一些沿着稀疏张量方向的东西(因为可能的词汇量非常大),但我不知道如何有效地实现它。 任何人都可以帮忙吗? 我基本上想实现一个指针生成器网络,在计算复制输入单词而不是生成单词的概率时需要这部分。

【问题讨论】:

    标签: python tensorflow machine-learning keras nlp


    【解决方案1】:

    您需要tf.bincount(),它计算整数数组中每个值的出现次数。一个例子:

    import tensorflow as tf
    import numpy as np
    
    indices_tf = tf.placeholder(shape=(None,None),dtype=tf.int32)
    weights_tf = tf.placeholder(shape=(None,None),dtype=tf.float32)
    
    # The returned index counts from 0
    result = tf.bincount(indices_tf,weights_tf)
    
    indices_data = np.array([1, 2, 3, 4, 5, 3])
    weights_data = np.array([0, 1, 0.5, 0.1, 0.6, 0.5])
    
    with tf.Session() as sess:
        print(sess.run(result, feed_dict={indices_tf:[indices_data],weights_tf:[weights_data]}))
        print(sess.run(result, feed_dict={indices_tf: [indices_data]*2, weights_tf: [weights_data]*2}))
    
    # print
    [0.  0.  1.  1.  0.1 0.6]
    [0.  0.  2.  2.  0.2 1.2]
    

    【讨论】:

      猜你喜欢
      • 2019-09-13
      • 2020-08-19
      • 2020-10-22
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 2016-10-07
      • 2016-11-14
      相关资源
      最近更新 更多