Найти обратную (много) разреженную (но блочно-диагональную) матрицу в TensorFlow - PullRequest
0 голосов
/ 21 июня 2019

Моя проблема заключается в следующем: у меня есть очень большое количество (миллионы) больших матриц для инвертирования, и я хотел бы сделать это с TensorFlow. В общем, это может быть довольно сложной проблемой, однако мои матрицы разрежены, в частности они имеют (неправильную) блочную диагональную структуру. Математически говоря, можно найти инверсию полной матрицы, выполнив группу инверсий гораздо меньших матриц, что гораздо быстрее.

Однако я хочу написать некоторый универсальный код для этой инверсии, где структура и размер блочно-диагональных матриц будут варьироваться между задачами. Поэтому было бы неплохо иметь алгоритм, который может вычислять саму диагональную структуру блока и использовать ее, и который может работать с разреженными матрицами в качестве входных и выходных данных (поскольку никогда не требуется хранить миллионы внеблоковых блоков). -диагональные элементы, и удобнее держать блок-диагональную «упаковку» вместе с точки зрения пользователя).

Я вижу, что TensorFlow имеет объекты SparseTensor, но я не могу найти слишком много об алгоритмах, которые могут их использовать. Мне повезло, и хороший алгоритм инверсии матрицы для block-SparseTensors уже существует? Я думаю, что не должно быть так сложно написать один, но я бы не стал изобретать велосипед.

Редактировать: Ах, я должен отметить, что блочно-диагональная структура будет одинаковой для всех матриц, которые будут инвертированы. Таким образом, планировалось собрать все матрицы в один гигантский 3D-тензор (а также столько, сколько может поместиться в ОЗУ).

...