张量流中的boolean_mask或稀疏点积

时间:2018-05-17 06:39:20

标签: python performance tensorflow neural-network nlp

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

我想在Tensorflow中implement syntactic 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])

1 个答案:

答案 0 :(得分:0)

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

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

  • tf.nn.embedding_lookup_sparse:与tf.nn.embedding_lookup相同,但idsSparseTensor