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])
答案 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
相同,但ids
为SparseTensor
。