логическое_маска или произведение редких точек в тензорном потоке - PullRequest
0 голосов
/ 17 мая 2018

tl; dr, какой самый эффективный способ динамически выбирать некоторые записи тензора.

Я пытаюсь реализовать синтаксический GCN в Tensorflow. По сути, мне нужно иметь разные весовые матрицы для каждой метки (давайте проигнорируем отклонения для этого вопроса) и выбирать при каждом запуске соответствующие записи для использования, которые будут выбираться разреженной матрицей (для каждой записи существует не более одной метки в одном направлении и в основном без края, так что даже не это).

Конкретнее, когда у меня есть разреженная матрица помеченных ребер (ноль-один), лучше ли использовать ее в маске, умножении с разреженной тензором или, может быть, просто использовать нормальное умножение (я думаю, не последнее, но для простоты используйте его в примере)

пример:

    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 голосов
/ 18 мая 2018

Чтобы ответить на ваш вопрос, вы можете воспользоваться одним из следующих способов:

  • tf.nn.embedding_lookup: обычно используется tf.nn.embedding_lookup(params, ids).Он возвращает Tensor, в котором записи по оси 0 являются подмножеством Tensor параметров.Индексы сохраняемых записей определяются Tensor идентификаторами.

  • tf.nn.embedding_lookup_sparse: аналогично tf.nn.embedding_lookup, но принимает ids как SparseTensor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...