如何在Keras/TensorFlow中根据不同向量的索引对值进行求和?

我是新来的,有一个关于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->02->13->14->0.15->0.6

我怎样才能在不需要遍历每个元素的情况下实现这个功能?我在考虑使用稀疏张量(因为可能的词汇量非常大),但我不知道如何高效地实现它。谁能帮帮我?我基本上想实现一个指针生成网络,而这部分是在计算复制输入单词而不是生成单词的概率时所必需的。


回答:

你需要使用tf.bincount(),它可以统计整数数组中每个值的出现次数。以下是一个示例:

import tensorflow as tfimport numpy as npindices_tf = tf.placeholder(shape=(None,None),dtype=tf.int32)weights_tf = tf.placeholder(shape=(None,None),dtype=tf.float32)# 返回的索引从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}))# 打印[0.  0.  1.  1.  0.1 0.6][0.  0.  2.  2.  0.2 1.2]

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注