首页 > 解决方案 > 张量流中的布尔掩码或稀疏点积

问题描述

tl;博士动态选择张量的某些条目的最有效方法是什么。

我正在尝试在 Tensorflow中实现 语法 GCN 。基本上,我需要为每个标签有一个不同的权重矩阵(让我们忽略这个问题的偏差)并在每次运行时选择要使用的相关条目,这些将由稀疏矩阵选择(对于每个条目,最多有一个标签在一个方向上,而且几乎没有边缘,所以甚至没有)。

更具体地说,当我有一个标记边缘的稀疏矩阵(零一)时,最好在掩码中使用它,稀疏密集张量乘法还是只使用正常乘法(我猜不是后者,而是为了简单在示例中使用它)

例子:

    units = 6 # output size 
    x = ops.convert_to_tensor(inputs[0], dtype=self.dtype)
    labeled_edges = ops.convert_to_tensor(inputs[1], dtype=self.dtype)
    edges_shape = labeled_edges.get_shape().as_list()
    labeled_edges = expand_dims(labeled_edges, -2)
    labeled_edges = tile(
        labeled_edges, [1] * (len(edges_shape) - 1) + [units, 1])
    graph_kernel = math_ops.multiply(self.kernel, labeled_edges) # here is the question basically
    outputs = standard_ops.tensordot(x, graph_kernel, [[1], [0]])
    outputs = math_ops.reduce_sum(outputs, [-1])

标签: pythonperformancetensorflowneural-networknlp

解决方案


要回答您的 tl;dr 问题,您可以尝试使用以下任一方法:

  • tf.nn.embedding_lookup: 典型用法是tf.nn.embedding_lookup(params, ids)。它返回 a Tensor,其中 0 轴条目是Tensor参数的子集。保留条目的索引由Tensorids 定义。

  • tf.nn.embedding_lookup_sparse: 与 : 相同,tf.nn.embedding_lookupids作为SparseTensor.


推荐阅读