python - 张量流中的布尔掩码或稀疏点积
问题描述
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])
解决方案
要回答您的 tl;dr 问题,您可以尝试使用以下任一方法:
tf.nn.embedding_lookup
: 典型用法是tf.nn.embedding_lookup(params, ids)
。它返回 aTensor
,其中 0 轴条目是Tensor
参数的子集。保留条目的索引由Tensor
ids 定义。tf.nn.embedding_lookup_sparse
: 与 : 相同,tf.nn.embedding_lookup
但ids
作为SparseTensor
.
推荐阅读
- agent-based-modeling - Repast Java:以结构化方式调度代理和全局行为
- amazon-web-services - 将视频从本地上传到 aws S3 时出错
- selenium - Firefox 在 Selenium 中自发启动
- android - 谷歌操作不适用于谷歌助理
- c# - Microsoft.Office.Interop 中的 COM 类工厂错误
- python - 我可以直接加载我想要的对象,跳过系列中的其他对象,用于泡菜文件
- sql - Oracle LIKE 模式匹配
- python-3.x - 如何从文本文件中提取 20 多个重复的 IP 地址
- node.js - 尝试与 Bit.dev 共享来自 Hyperapp 的代码
- c# - 无法访问后端项目中上传的图像