Обеспечивает ли тензор потока sparse_dense_matmul правильный результат в случае неупорядоченных индексов? - PullRequest
0 голосов
/ 25 марта 2020

Документация tf.sparse.sparse_dense_matmul выглядит следующим образом:

Однако для оптимального поведения рекомендуется следующий формат ввода:

Если adjoint_a == false: A следует отсортировать в лексикографически возрастающем порядке. Используйте sparse.reorder, если вы не уверены. Если adjoint_a == true: A должен быть отсортирован в порядке возрастания измерения 1 (т. Е. В порядке «основной столбец» вместо «основной порядок строк»).

Что означает «оптимальное поведение» и работает ли он также без упорядоченных индексов?

Когда * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *, который не использует упорядочивание, примерно в 30 раз медленнее, чем без упорядочивания.

    value = tf.concat([value00[valid00], value01[valid01], value10[valid10], value11[valid11]], axis=0)
    idxRow = tf.concat([idx00[valid00], idx01[valid01], idx10[valid10], idx11[valid11]], axis=0)
    idxCol = tf.concat([mesh[valid00], mesh[valid01], mesh[valid10], mesh[valid11]], axis=0)


    sparseTensor = tf.sparse.SparseTensor(
        indices=tf.transpose([idxRow, idxCol]),
        values=value,
        dense_shape=[batchSize * xSize * ySize, batchSize * xSize * ySize]
    )

    sparseTensor = tf.sparse.reorder(sparseTensor)

    movedFlat = tf.sparse.sparse_dense_matmul(sparseTensor, tf.reshape(tf.transpose(img_ref, perm = [0, 2, 1]),
                                                                       [tf.shape(img_ref)[0] * img_ref.shape[1] * img_ref.shape[2], 1]))

    result = tf.transpose(tf.reshape(movedFlat, (tf.shape(img_ref)[0], img_ref.shape[2], img_ref.shape[1])), perm = [0, 2, 1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...